题意:给一个三维数组n*n*n,初始都为0,每次有两个操作:

1. 翻转(x1,y1,z1) -> (x2,y2,z2)

0. 查询A[x][y][z] (A为该数组)

解法:树状数组维护操作次数,一个数被操作偶数次则相当于没被操作。

每次更新时在8个位置更新:

。相当于8个二进制数:000,001,010,011,100,101,110,111. (我是由二维推过来的)

其实不用有的为-1,直接1也行,因为反正会改变奇偶性。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std; int c[][][];
int n; int lowbit(int x) { return x & (-x); } void modify(int x,int y,int z,int val)
{
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))
c[i][j][k] += val;
} int getsum(int x,int y,int z)
{
int sum = ;
for(int i=x;i>;i-=lowbit(i))
for(int j=y;j>;j-=lowbit(j))
for(int k=z;k>;k-=lowbit(k))
sum += c[i][j][k];
return sum;
} int main()
{
int q,op;
int x,y,z,x1,y1,z1,x2,y2,z2;
while(scanf("%d%d",&n,&q)!=EOF)
{
memset(c,,sizeof(c));
while(q--)
{
scanf("%d",&op);
if(op == )
{
scanf("%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2);
modify(x1,y1,z1,);
modify(x1,y1,z2+,-);
modify(x1,y2+,z1,-);
modify(x1,y2+,z2+,);
modify(x2+,y1,z1,-);
modify(x2+,y1,z2+,);
modify(x2+,y2+,z1,);
modify(x2+,y2+,z2+,-);
}
else
{
scanf("%d%d%d",&x,&y,&z);
int sum = getsum(x,y,z);
printf("%d\n",sum%);
}
}
}
return ;
}

HDU 3584 Cube --三维树状数组的更多相关文章

  1. HDU - 3584 Cube (三维树状数组 + 区间改动 + 单点求值)

    HDU - 3584 Cube Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Subm ...

  2. HDU 3584 Cube (三维树状数组)

    Problem Description Given an N*N*N cube A, whose elements are either 0 or 1. A[i, j, k] means the nu ...

  3. HDU 3584 Cube 【 三维树状数组 】

    题意:还是那篇论文里面讲到的,三维树状数组http://wenku.baidu.com/view/1e51750abb68a98271fefaa8画个立方体出来对照一下好想一点 #include< ...

  4. HDU 3584 三维树状数组

    三维树状数组模版.优化不动了. #include <set> #include <map> #include <stack> #include <cmath& ...

  5. 1470. UFOs(三维树状数组)

    1470 最简单的三维树状数组 #include <iostream> #include<cstdio> #include<cstring> #include< ...

  6. 暴力三维树状数组求曼哈顿距离求最值——牛客多校第八场D

    涉及的知识点挺多,但是大多是套路 1.求曼哈顿距离的最值一般对所有情况进行讨论 2.三维树状数组用来求前缀最大值 /* 有一个三维坐标系(x,y,z),取值范围为[1,n],[1,m],[1,h],有 ...

  7. HDU 3333 | Codeforces 703D 树状数组、离散化

    HDU 3333:http://acm.hdu.edu.cn/showproblem.php?pid=3333 这两个题是类似的,都是离线处理查询,对每次查询的区间的右端点进行排序.这里我们需要离散化 ...

  8. HDU 3333 - Turing Tree (树状数组+离线处理+哈希+贪心)

    题意:给一个数组,每次查询输出区间内不重复数字的和. 这是3xian教主的题. 用前缀和的思想可以轻易求得区间的和,但是对于重复数字这点很难处理.在线很难下手,考虑离线处理. 将所有查询区间从右端点由 ...

  9. HDU 3333 Turing Tree (树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意就是询问区间不同数字的和. 比较经典的树状数组应用. //#pragma comment(l ...

随机推荐

  1. Hibernate中的脏检查和缓存清理机制

    脏检查 Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照.当Session清理缓存时, ...

  2. 养只爬虫当宠物(Node.js爬虫爬取58同城租房信息)

    先上一个源代码吧. https://github.com/answershuto/Rental 欢迎指导交流. 效果图 搭建Node.js环境及启动服务 安装node以及npm,用express模块启 ...

  3. Android启示录——开始Android旅途

    为了明年可以开始进行android程序开发,开始从零开始学习android,仅以此代表第一步开始(*^_^*),开始搭建环境…… 1. 软件下载 http://developer.android.co ...

  4. 如何解决cellIndex在IE下兼容性问题

    在不久前的项目中,涉及到一个表格数据展示在IE下出现兼容性问题.经过一段时间的排查,居然是一个cellIndex属性导致的. cellIndex表示返回一行的单元格集合中单元格的位置索引. 例子: & ...

  5. AT NEW F、AT END OF F注意事项

    1.F只能是内表的第一个字段 2.AT NEW F.AT END OF F使用F之后内表内容会变为* 解决出现*的办法: FIELD-SYMBOLS:<ITAB> LIKE  ITAB L ...

  6. Atitit.木马病毒的免杀原理---sikuli 的使用

    Atitit.木马病毒的免杀原理---sikuli 的使用 1. 使用sikuli java api1 1.1. 3. Write code!1 2. 常用api2 2.1. wait 等待某个界面出 ...

  7. IOS 杂笔-19(属性与变量的优缺点)

    IOS 杂笔-19(属性与变量的优缺点) 在前面的文章中我介绍了属性与变量的区别.这篇博客我将会简单介绍一下属性与变量的优缺点. 变量 优点: 访问速度快 缺点: 使用不灵活 属性 缺点: 耗时 优点 ...

  8. iOS-RegexKitLite导入错误

    RegexKitLite是什么? RegexKitLite是一个非常方便的处理正则表达式的第三方类库. 本身只有一个RegexKitLite.h和RegexKitLite.m 导入RegexKitLi ...

  9. Reveal常用技巧(翻译来自Reveal官网blog)

    翻译来自官网:http://revealapp.com/blog/reveal-common-tips-cn.html 以下基于Reveal 1.6. 用于快速上手的内置应用 刚刚下载Reveal,啥 ...

  10. FQ技术

    什么是技术,就是翻_墙技术啦~ 关于GoogleFQ的网页,点击图片就能进入该网页浏览相关的FQ的设置 hosts所在文件夹: Windows 系统hosts位于 C:\Windows\System3 ...