题意:给一个三维数组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. 方法----MessageDigest和DigestUtils加密算法

    总结:使用DigestUtils的方法加密的结果与messageDigest的方法加密结果一致,可使用DigestUtils替换MessageDigest 可省掉部分代码 package com.ac ...

  2. phpcms v9 升级视频云问题推荐位不能添加

    因为使用的是v9的早期版本,后来升级的时候没敢升级数据库,直接使用了老的数据库结构,造成[推荐位]添加不能使用,报告没有thumb列. 查看数据库果然没有,没办法要么添加相关的列,要么禁用上传缩略图. ...

  3. 修改list中附件排序(sharepoint 2010)

    修改文件C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\CONTROLTEMPLATE ...

  4. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q28-Q31)

    Question28You have a Microsoft Office SharePoint Server 2007 site.You upgrade the site to SharePoint ...

  5. object-c中的类目,延展,协议

    协议 协议只有方法的声明(类似于其他编程语言的接口)   协议相当于大家都所遵循的 关键字 @protocol 协议名 <所遵循的协议> 默认NSObject   @end     @pr ...

  6. 多线程基础(七)GCD线程组+栅栏函数

      1.GCD队列组     拦截通知和等待所有任务全部结束在继续往下执行|阻塞   需求:下载两张图片,等两张图片都下载完毕之后,合成图片(这个实例,复习的时候一定要凭空敲出代码练习,好记性不如烂键 ...

  7. Objective-C之Protocol

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  8. 配置JDK环境变量

    •配置JDK环境变量<Windows系统下> 点击我的电脑右键----->属性------>高级------>环境变量------->  新建(建议在系统变量中新建 ...

  9. IOS之Foundation之探究学习Swift实用基础整理<一>

    import Foundation //加载网络数据,查找数据的字符串 let dataurl = "http://api.k780.com:88/?app=weather.city& ...

  10. new与malloc的区别

    看起来,它们的不同只是new比malloc用起来更方便而已.仅仅是这样吗?不是吗? 1 来源不同: 1)new/delete是C++中的操作符,而malloc/free是C中的标准库函数,需要库文件支 ...