题意:一开始三维数组的元素都为0,当输入操作为1时把1->0或者0->1..问经过许多次操作后该位置是1还是0,。
#include<iostream> #include<cstdio> #include<string.h> #include<algorithm> #include<assert.h> #define N 101 using namespace std; int s[N][N][N]; int lowbit(int x) {return x&(-x);} void update(int x,int y,int z) { for(int i=x;i<N;i+=lowbit(i)) for(int j=y;j<N;j+=lowbit(j)) for(int k=z;k<N;k+=lowbit(k)) s[i][j][k]++; } int Quary(int x,int y,int z) { int sum=0; for(int i=x;i>0;i-=lowbit(i)) for(int j=y;j>0;j-=lowbit(j)) for(int k=z;k>0; k-=lowbit(k)) sum+=s[i][j][k]; return sum; } int main() { int n,m; while(~scanf("%d%d",&n,&m)) { int flag; int x1,y1,z1,x2,y2,z2; memset(s,0,sizeof(s)); while(m--) { scanf("%d",&flag); if(flag==0) { scanf("%d%d%d",&x1,&y1,&z1); printf("%d\n",Quary(x1,y1,z1)%2); } else { scanf("%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2); update(x1,y1,z1); update(x1,y1,z2+1); update(x1,y2+1,z1); update(x1,y2+1,z2+1); update(x2+1,y1,z1); update(x2+1,y2+1,z1); update(x2+1,y1,z2+1); update(x2+1,y2+1,z2+1); } } }return 0; }