这是一道树状数组的题目~~
居然可以把ADD和SUM反过来干...
以后有时间要研究研究下~~
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
#define M 1003
using namespace std;
int g[M][M];
int n;
void add(int x,int y)
{
while(y<=n)
{
int xx=x;
while(xx<=n)
{
g[xx][y]++;
xx+=xx&-xx;
}
y+=y&-y;
}
}
int sum(int x2,int y2)
{
int s=0;
while(y2)
{
int xx=x2;
while(xx)
{
s+=g[xx][y2];
xx-=xx&-xx;
}
y2-=y2&-y2;
}
return s;
}
int main()
{
int cs;
scanf("%d",&cs);
while(cs--)
{
memset(g,0,sizeof(g));
int t;
scanf("%d%d",&n,&t);
for(int i=0;i<t;i++)
{
char op;
getchar();
scanf("%c",&op);
//cout<<op<<endl;
if(op=='C')
{
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
add(x1,y1);
add(x1,y2+1);
add(x2+1,y1);
add(x2+1,y2+1);
}
else
{
int x1,y1;
scanf("%d%d",&x1,&y1);
printf("%d\n",sum(x1,y1)%2);
}
}
printf("\n");
}
}