HDU3584 Cube
来源:互联网 发布:手机免费炒股软件 编辑:程序博客网 时间:2024/06/11 21:16
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3584
三维树状数组。
由题意可知,进行偶数次操作后的结果是0,进行奇数次为1。
这样用树状数组记录操作次数,最后判断奇偶就行了。
在更新每一个立方体的时候,要注意处理那些立方体之外多加的那些。操作详见代码。
代码:
#include <cstdio>#include <cstring>#include <iostream>#include <cstdlib>#include <algorithm>#include <map>using namespace std;int tree[105][105][105];int n,m;int lb(int x){return x&-x;}void add(int num,int x,int y,int z){for(int i=x;i<=n;i+=lb(i)){for(int j=y;j<=n;j+=lb(j)){for(int k=z;k<=n;k+=lb(k)){tree[i][j][k]+=num;}}}}int read(int x,int y,int z){int tot=0;for(int i=x;i;i-=lb(i)){for(int j=y;j;j-=lb(j)){for(int k=z;k;k-=lb(k)){tot+=tree[i][j][k];}}}return tot;}int main(){while(scanf("%d%d",&n,&m)!=EOF){memset(tree,0,sizeof(tree));for(int i=1;i<=m;i++){int c;scanf("%d",&c);if(c){int x1,y1,z1,x2,y2,z2;scanf("%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2);add(1,x1,y1,z1);add(1,x1,y1,z2+1);add(1,x1,y2+1,z1);add(1,x2+1,y1,z1);add(1,x1,y2+1,z2+1);add(1,x2+1,y1,z2+1);add(1,x2+1,y2+1,z1);add(1,x2+1,y2+1,z2+1);}else{int x1,y1,z1;scanf("%d%d%d",&x1,&y1,&z1);int t=read(x1,y1,z1);if(t&1)printf("1\n");else printf("0\n");}}}return 0;}
阅读全文
0 0
- Hdu3584 Cube
- HDU3584 Cube
- HDU3584-Cube
- HDU3584 Cube
- hdu3584 Cube 树状数组
- hdu3584 Cube【三维树状数组】
- HDU3584 Cube【树状数组】【三维】
- HDU3584 Cube 三维树状数组
- [HDU3584] Cube - 三维树状数组
- hdu3584--Cube(三维树状数组)
- HDU3584 Cube(三维树状区间更新+位运算)
- HDU3584(树状数组)
- hdu3584三维树状数组
- Cube
- cube
- cube
- cube
- Cube
- numpy 多个随机整数生成
- 8月英语总结
- Oracle LOB
- Python中小整数对象池和大整数对象池
- 'ascii' codec can't encode characters in position解决办法
- HDU3584 Cube
- Allowance POJ
- 奇怪的文件名——write up
- 2017年8月25日 星期五
- 函数式编程
- sparkSql入门1
- Hibernate配置详解
- ACM进阶之路
- stm32 内存管理