| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
二维树状树组#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int c[101][101];
int b[101][101];
int Row,Col;
inline int Lowbit(const int &x)
{
return x&(-x);
}
int Sum(int i,int j)
{
int tempj,sum=0;
while(i > 0)
{
tempj=j;
while(tempj > 0){
sum+=c[i][tempj];
tempj-=Lowbit(tempj);
}
i-=Lowbit(i);
}
return sum;
}
void Update(int i,int j,int num)
{
int tempj;
while(i<=Row)
{
tempj=j;
while(tempj<=Col){
c[i][tempj]+=num;
tempj+=Lowbit(tempj);
}
i+=Lowbit(i);
}
}
void whiteUpdate(int x,int y,int L)
{
for(int i=x;i<x+L;++i)
for(int j=y;j<y+L;++j)
{
if(b[i][j]==1) {b[i][j]=0;Update(i,j,-1);}
else continue;
}
}
void blackUpdate(int x,int y,int L)
{
for(int i=x;i<x+L;++i)
for(int j=y;j<y+L;++j)
{
if(b[i][j]==1) continue;
else {b[i][j]=1;Update(i,j,1);};
}
}
int blackSum(int x,int y,int L)
{
return Sum(x+L-1,y+L-1)+Sum(x-1,y-1)-Sum(x-1,y+L-1)-Sum(x+L-1,y-1);
}
int main()
{
int x,y,L,N;
string str;
Row=Col=100;
memset(c,0,sizeof(c));
memset(b,0,sizeof(b));
cin>>N;
while(N--)
{
cin>>str>>x>>y>>L;
switch(str[0])
{
case 'W':
whiteUpdate(x,y,L);
break;
case 'B':
blackUpdate(x,y,L);
break;
case 'T':
cout<<blackSum(x,y,L)<<endl;
break;
default: break;
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator