我们可以通过以下方式更改矩阵。给定一个左上角为(x1,y1)且右下角为(x2,y2)的矩形,我们使用“not”操作更改矩形中的所有元素(如果是'0'则更改它变为'1'否则将其变为'0')。要维护矩阵的信息,系统会要求您编写程序以接收和执行两种指令。
1. C x1 y1 x2 y2(1 <= x1 <= x2 <= n,1 <= y1 <= y2 <= n)通过使用左上角为(x1,y1)和更低的矩形来改变矩阵 - 右角是(x2,y2)。
2. Q xy(1 <= x,
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int N; int c[1005][1005]; int lowbit(int i) { return i&-i; } void update(int x,int y,int v) { for(int i=x;i<=N;i+=lowbit(i)) for(int j=y;j<=N;j+=lowbit(j)) c[i][j]+=v; } int sum(int x,int y) { int ans=0; for(int i=x;i>0;i-=lowbit(i)) for(int j=y;j>0;j-=lowbit(j)) ans+=c[i][j]; return ans; } int main() { int cas,q; scanf("%d",&cas); int first=1; for(int i=1;i<=cas;i++) { if(i!=1)printf("\n"); scanf("%d%d",&N,&q); memset(c,0,sizeof(c)); char s[5]; int x1,x2,y1,y2; while(q--) { scanf("%s",s); if(s[0]=='C') { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); update(x1,y1,1); update(x2+1,y1,-1); update(x1,y2+1,-1); update(x2+1,y2+1,1); } else if(s[0]=='Q') { scanf("%d%d",&x1,&y1); printf("%d\n",sum(x1,y1)%2); } } } return 0; }
















