题目大意是对一个二维空间上的平面进行操作,C是对其进行修改,Q是进行查询,可以运用树状数组来进行求解。
#include<stdio.h> #include<string.h> #define maxn 1005 int c[maxn][maxn]; int lowbit(int x) { return x&(-x); } int add(int i,int j,int val) { while(i<maxn) { int ss=j; while(ss<maxn) { c[i][ss]+=val; ss+=lowbit(ss); } i+=lowbit(i); } } long long int query(int i,int j) { long long int ans=0; while(i>0) { int ss=j; while(ss>0) { ans+=c[i][ss]; ss-=lowbit(ss); } i-=lowbit(i); } return ans; } int main() { int t; scanf("%d",&t); while(t--) { memset(c,0,sizeof(c)); int n,m; scanf("%d%d",&n,&m); while(m--) { char vis; getchar(); scanf("%c",&vis); if(vis=='C') { int x1,y1,x2,y2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); add(x2+1,y2+1,1);//区间修改 add(x1,y2+1,-1); add(x2+1,y1,-1); add(x1,y1,1); } else { int x,y; scanf("%d%d",&x,&y); printf("%lld\n",query(x,y)%2); } } //scanf("%d",&n); if(t!=0)printf("\n"); } }