詳細見:http://wenku.baidu.com/view/2175f419ff00bed5b9f31db4.html
更新8個頂點就行了
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define lowbit(x) x&-x
const int maxn=105;
int n,m,a[maxn][maxn][maxn];
void init()
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
memset(a[i][j],0,4*n);
}
void ins(int x,int y,int z,int val=1)
{
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))
a[i][j][k]^=val;
}
int query(int x,int y,int z)
{
int ret=0;
for(int i=x;i;i-=lowbit(i))
for(int j=y;j;j-=lowbit(j))
for(int k=z;k;k-=lowbit(k))
ret^=a[i][j][k];
return ret;
}
inline void read(int &d)
{
char ch;
while(ch=getchar(),ch>57||ch<48);d=ch-48;
while(ch=getchar(),ch>47&&ch<58) d=d*10+ch-48;
}
int main()
{
while(cin>>n>>m)
{
int ch;n+=2;
init();
for(int i=0;i<m;i++)
{
read(ch);
int x,y,z,i,j,k;
if(ch)
{
read(x),read(y),read(z),read(i),read(j),read(k);
i++,j++,k++;
ins(x,y,z);
ins(x,y,k);
ins(x,j,z);
ins(x,j,k);
ins(i,y,z);
ins(i,y,k);
ins(i,j,z);
ins(i,j,k);
}
else
{
read(x),read(y),read(z);
puts(query(x,y,z)?"1":"0");
}
}
}
return 0;
}