HDU 3584 Cube (三维树状数组)
2015-06-05 21:57
253 查看
题目链接: 戳我
题目大意:
思路: 看这篇论文
算法合集之《浅谈信息学竞赛中的“0”和“1”》
代码:
题目大意:
思路: 看这篇论文
算法合集之《浅谈信息学竞赛中的“0”和“1”》
代码:
//Author LJH //www.cnblogs.com/tenlee #include <cstdio> #include <cstdlib> #include <cstring> #include <cctype> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <map> #define clc(a, b) memset(a, b, sizeof(a)) using namespace std; const int inf = 0x3f; const int INF = 0x3f3f3f3f; const int maxn = 105; int a[maxn][maxn][maxn], n; int lowbit(int x) { return x & -x; } void Add(int x, int y, int z, int val) { int yy = y, zz = z; while(x <= maxn) { yy = y; while(yy <= maxn) { zz = z; while(zz <= maxn) { a[x][yy][zz] += val; zz += lowbit(zz); } yy += lowbit(yy); } x += lowbit(x); } } int Sum(int x, int y, int z) { int yy = y, zz = z, ans = 0; while(x) { yy = y; while(yy) { zz = z; while(zz) { ans += a[x][yy][zz]; zz -= lowbit(zz); } yy -= lowbit(yy); } x -= lowbit(x); } return ans; } int main() { int m, op, x1, y1, z1, x2, y2, z2; while(~scanf("%d %d", &n, &m)) { memset(a, 0, sizeof(a)); while(m--) { scanf("%d", &op); if(op == 1) { scanf("%d %d %d %d %d %d", &x1, &y1, &z1, &x2, &y2, &z2); x1++ , y1++ , z1++; x2++ , y2++ , z2++; // up Add(x1 , y1 , z1 , 1); Add(x1 , y2+1 , z1 , -1); Add(x2+1 , y1 , z1 , -1); Add(x2+1 , y2+1 , z1 , 1); // down Add(x1 , y1 , z2+1 , -1); Add(x1 , y2+1 , z2+1 , 1); Add(x2+1 , y1 , z2+1 , 1); Add(x2+1 , y2+1 , z2+1 , -1); } else { scanf("%d %d %d", &x1, &y1, &z1); x1++; y1++; z1++; printf("%d\n", Sum(x1, y1, z1) % 2); } } } }
相关文章推荐
- [Python] 网络爬虫和正则表达式学习总结
- js获取项目根目录
- 转载: java的接口、类、属性、方法各有哪些修饰符
- Linux Page Cache机制
- Hadoop文件解压缩
- 在 VC6 中使用 GdiPlus-安装
- CSAPP缓冲区溢出攻击实验(上)
- Java模拟抢红包应用
- 面试题:说说Java中接口、类、成员变量、成员方法、构造方法有哪些访问修饰符和他们的作用范围
- AUC与ROC
- Fragement真正的解析
- [Java] Webservice之即时发布JWS教程 (一)
- CSAPP缓冲区溢出攻击实验(上)
- POJ 3009 Curling 2.0 回溯,dfs 难度:0
- 小管理 大智慧
- 我爱淘冲刺阶段站立会议2每天任务6
- Windows server 服务器之DHCP服务器升级
- Metrics类
- Android App每日更换壁纸
- netty源码编译环境搭建