hdu 3584 Cube (三维树状数组,更新区间,查询单点)
# 三维树状数组
容斥那里注意一下。
多组数据因为忘记清空c数组而wa了1次,细心!
代码实现 1/************************************************************************* 2 > File Name: code/hdu/3584.cpp 3 > Author: 111qqz 4 > Email: rkz2013@126.com 5 > Created Time: 2015年08月07日 星期五 14时01分53秒 6 ************************************************************************/ 7 8#include<iostream> 9#include<iomanip> 10#include<cstdio> 11#include<algorithm> 12#include<cmath> 13#include<cstring> 14#include<string> 15#include<map> 16#include<set> 17#include<queue> 18#include<vector> 19#include<stack> 20#define y0 abc111qqz 21#define y1 hust111qqz 22#define yn hez111qqz 23#define j1 cute111qqz 24#define tm crazy111qqz 25#define lr dying111qqz 26using namespace std; 27#define REP(i, n) for (int i=0;i<int(n);++i) 28typedef long long LL; 29typedef unsigned long long ULL; 30const int inf = 0x7fffffff; 31const int N=1E2+5; 32int c[N][N][N]; 33int n,m; 34int x1,y1,z1,x2,y2,z2; 35int lowbit( int x) 36{ 37 return x&(-x); 38} 39void update ( int x,int y,int z,int delta) 40{ 41 for ( int i = x; i <= n ; i = i + lowbit(i)) 42 { 43 for ( int j = y ; j <= n ; j = j + lowbit(j)) 44 { 45 for ( int k = z ; k <= n ; k = k + lowbit(k)) 46 { 47 c[i][j][k] += delta; 48 } 49 } 50 } 51} 52 53int sum (int x,int y,int z) 54{ 55 int res = 0; 56 for ( int i = x; i >= 1 ; i -= lowbit(i)) 57 { 58 for ( int j = y ; j >= 1 ; j -= lowbit(j)) 59 { 60 for ( int k = z ; k >= 1 ; k -= lowbit(k)) 61 { 62 res = res + c[i][j][k]; 63 } 64 } 65 } 66 return res; 67} 68int main() 69{ 70 int op; 71 while (scanf("%d %d",&n,&m)!=EOF) 72 { 73 memset(c,0,sizeof(c)); 74 for ( int i = 1 ; i <= m ; i ++ ) 75 { 76 scanf("%d",&op); 77 if (op) 78 { 79 scanf("%d %d %d %d %d %d",&x1,&y1,&z1,&x2,&y2,&z2); 80 update (x1,y1,z1,1); 81 update (x1,y1,z2+1,1); 82 update (x1,y2+1,z1,1); 83 update (x2+1,y1,z1,1); 84 85 update (x2+1,y2+1,z1,1); 86 update (x2+1,y1,z2+1,1); 87 update (x1,y2+1,z2+1,1); 88 update (x2+1,y2+1,z2+1,1); 89 90 } 91 else 92 { 93 scanf("%d %d %d",&x1,&y1,&z1); 94 cout<<sum(x1,y1,z1)%2<<endl; 95 } 96 } 97 } 98 99 return 0; 100}