HDU 3584 三维树状数组
2013-09-03 21:23
176 查看
给一个n和一个m,n*n*n 的空间里,进行m次操作,一共有两种操作
_0 查询 x y z 点的状态.
_1 x1 y1 z1 x2 y2 z2 两点确定一个长方体,长方体内所有元素取反
区间更新,点查询。
get()得到点状态,add ()更新右上方,但是操作有8次.(2维4次)
三维的和二维的差不多...
_0 查询 x y z 点的状态.
_1 x1 y1 z1 x2 y2 z2 两点确定一个长方体,长方体内所有元素取反
区间更新,点查询。
get()得到点状态,add ()更新右上方,但是操作有8次.(2维4次)
三维的和二维的差不多...
#include<stdio.h> #include<string.h> #include<string> using namespace std; int cc[105][105][105]; int mx=101; int lowbit(int x){ return -x&x; } void add(int x,int y,int z,int v){ int rt=y,rt2=z; while(x<=mx){ y=rt; while(y<=mx){ z=rt2; while(z<=mx){ cc[x][y][z]+=v,z+=lowbit(z); } y+=lowbit(y); } x+=lowbit(x); } } int get(int x,int y,int z){ int sum=0,rt=y,rt2=z; while(x>0){ y=rt; while(y>0){ z=rt2; while(z>0){ sum+=cc[x][y][z]; z-=lowbit(z); } y-=lowbit(y); } x-=lowbit(x); }return sum; } int main(){ int x,y,z,a,b,c,m,q; while(scanf("%d %d",&mx,&m)!=EOF){ memset(cc,0,sizeof(cc)); while(m--){ scanf("%d",&q); if(1==q){ scanf("%d %d %d %d %d %d",&x,&y,&z,&a,&b,&c); int xx=min(x,a),xxx=x+a-xx; int yy=min(y,b),yyy=y+b-yy; int zz=min(z,c),zzz=z+c-zz; add(xx,yy,zz,1); add(xxx+1,yyy+1,zzz+1,1); add(xxx+1,yyy+1,zz,1); add(xxx+1,yy,zzz+1,1); add(xx,yyy+1,zzz+1,1); add(xxx+1,yy,zz,-1); add(xx,yyy+1,zz,-1); add(xx,yy,zzz+1,-1); } else { scanf("%d %d %d",&x,&y,&z); printf("%d\n",(get(x,y,z)&1)); } } } return 0; }
相关文章推荐
- POJ-2155 Matrix 二维树状数组, HDU-3584 Cube 三维树状数组
- 【树状数组+三维】杭电 hdu 3584 Cube
- 【树状数组(三维)】hdu 3584 Cube
- hdu 3584 Cube(三维树状数组)
- HDU 3584 Cube(三维树状数组)
- hdu 3584 二进制0,1反转 三维树状数组 及三维树状数组模板
- HDU 3584 Cube (三维树状数组)
- HDU 3584 Cube (三维树状数组)
- poj 2155 Matrix(二维树状数组) hdu 3584 Cube(三维)
- HDU 3584 Cube(三维树状数组)
- hdu 3584 (三维树状数组模板 )
- HDU 3584 Cube(三维树状数组)
- hdu 3584 Cube (三维树状数组)
- hdu 3584 三维树状数组
- HDU 3584 Cube(三维树状数组)
- hdu 1541 Stars poj 1195 Mobile phones(二维) poj 2155 Matrix(二维) hdu 3584 Cube(三维) 树状数组
- HDU 3584 Cube (三维树状数组)
- HDU 3584 Cube(三维树状数组)
- HDU 3584 Cube --三维树状数组
- HDU 3584 Cube (三维树状数组)