POJ 2155
二维树状数组的区间更新+单点查询
#include <cstdio>
#include <cstring>
const int maxn=1000;
int T,n,q,x,y,x1,y1,bit[maxn+1][maxn+1];
char s[5];
void add(int i,int y){
for(;i<=n;i+=i&-i)
for(int j=y;j<=n;j+=j&-j)
bit[i][j]++;
}
int sum(int i,int y){
int ans=0;
for(;i>=1;i-=i&-i)
for(int j=y;j>=1;j-=j&-j)
ans+=bit[i][j];
return ans;
}
int main(){
scanf("%d",&T);
while(T--){
memset(bit,0,sizeof(bit));
scanf("%d%d",&n,&q);
while(q--){
scanf("%s%d%d",s,&x,&y);
if(s[0]=='C'){
scanf("%d%d",&x1,&y1);
add(x,y);
add(x,y1+1);
add(x1+1,y);
add(x1+1,y1+1);
}
else{
printf("%d\n",sum(x,y)&1);
}
}
if(T>=1)printf("\n");
}
return 0;
}