poj2155 Matrix 二维树状数组
一道模板题。
然而和一维的差不多。
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<queue>
#include<ctime>
const int N=1007;
typedef long long LL;
using namespace std;
int T,n,q,sum[N][N],x,y,x1,y1;
char o[20];
template<typename T> void read(T &x) {
char ch=getchar(); x=0; T f=1;
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') f=-1,ch=getchar();
for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
}
void add(int x,int y,int v) {
for(int i=x;i<=n;i+=(i&(-i)))
for(int j=y;j<=n;j+=(j&(-j)))
sum[i][j]+=v;
}
int qry(int x,int y) {
int res=0;
for(int i=x;i;i-=(i&(-i)))
for(int j=y;j;j-=(j&(-j)))
res+=sum[i][j];
return res;
}
void work() {
read(T);
while(T--) {
read(n);
read(q);
memset(sum,0,sizeof(sum));
while(q--) {
scanf("%s",o);
if(o[0]=='C') {
read(x); read(y);
read(x1); read(y1);
add(x,y,1);
add(x,y1+1,-1);
add(x1+1,y,-1);
add(x1+1,y1+1,1);
}
else {
read(x); read(y);
printf("%d\n",qry(x,y)%2);
}
}
if(T) printf("\n");
}
}
int main() {
#ifdef DEBUG
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
work();
return 0;
}