hdu 3584 Cube (三维树状数组,更新区间,查询单点)
2015-08-07 14:20
531 查看
Cube
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 1722 Accepted Submission(s): 898
[align=left]Problem Description[/align]
Given an N*N*N cube A, whose elements are either 0 or 1. A[i, j, k] means the number in the i-th row , j-th column and k-th layer. Initially we have A[i, j, k] = 0 (1 <= i, j, k <= N).
We define two operations, 1: “Not” operation that we change the A[i, j, k]=!A[i, j, k]. that means we change A[i, j, k] from 0->1,or 1->0. (x1<=i<=x2,y1<=j<=y2,z1<=k<=z2).
0: “Query” operation we want to get the value of A[i, j, k].
[align=left]Input[/align]
Multi-cases.
First line contains N and M, M lines follow indicating the operation below.
Each operation contains an X, the type of operation. 1: “Not” operation and 0: “Query” operation.
If X is 1, following x1, y1, z1, x2, y2, z2.
If X is 0, following x, y, z.
[align=left]Output[/align]
For each query output A[x, y, z] in one line. (1<=n<=100 sum of m <=10000)
[align=left]Sample Input[/align]
2 5
1 1 1 1 1 1 1
0 1 1 1
1 1 1 1 2 2 2
0 1 1 1
0 2 2 2
[align=left]Sample Output[/align]
1
0
1
[align=left]Author[/align]
alpc32
[align=left]Source[/align]
2010 ACM-ICPC Multi-University Training Contest(15)——Host by NUDT
三维树状数组
容斥那里注意一下。
多组数据因为忘记清空c数组而wa了1次,细心!
/************************************************************************* > File Name: code/hdu/3584.cpp > Author: 111qqz > Email: rkz2013@126.com > Created Time: 2015年08月07日 星期五 14时01分53秒 ************************************************************************/ #include<iostream> #include<iomanip> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<string> #include<map> #include<set> #include<queue> #include<vector> #include<stack> #define y0 abc111qqz #define y1 hust111qqz #define yn hez111qqz #define j1 cute111qqz #define tm crazy111qqz #define lr dying111qqz using namespace std; #define REP(i, n) for (int i=0;i<int(n);++i) typedef long long LL; typedef unsigned long long ULL; const int inf = 0x7fffffff; const int N=1E2+5; int c ; int n,m; int x1,y1,z1,x2,y2,z2; int lowbit( int x) { return x&(-x); } void update ( int x,int y,int z,int delta) { for ( int i = x; i <= n ; i = i + lowbit(i)) { for ( int j = y ; j <= n ; j = j + lowbit(j)) { for ( int k = z ; k <= n ; k = k + lowbit(k)) { c[i][j][k] += delta; } } } } int sum (int x,int y,int z) { int res = 0; for ( int i = x; i >= 1 ; i -= lowbit(i)) { for ( int j = y ; j >= 1 ; j -= lowbit(j)) { for ( int k = z ; k >= 1 ; k -= lowbit(k)) { res = res + c[i][j][k]; } } } return res; } int main() { int op; while (scanf("%d %d",&n,&m)!=EOF) { memset(c,0,sizeof(c)); for ( int i = 1 ; i <= m ; i ++ ) { scanf("%d",&op); if (op) { scanf("%d %d %d %d %d %d",&x1,&y1,&z1,&x2,&y2,&z2); update (x1,y1,z1,1); update (x1,y1,z2+1,1); update (x1,y2+1,z1,1); update (x2+1,y1,z1,1); update (x2+1,y2+1,z1,1); update (x2+1,y1,z2+1,1); update (x1,y2+1,z2+1,1); update (x2+1,y2+1,z2+1,1); } else { scanf("%d %d %d",&x1,&y1,&z1); cout<<sum(x1,y1,z1)%2<<endl; } } } return 0; }
相关文章推荐
- 一次「Too many open files」故障
- Symmetric Tree
- Java动态代理实现(简单AOP实现)
- Codeforces 567 E. President and Roads
- codeforces 567D One-Dimensional Battle Ships (set)
- 新的Android databinding与android-apt plugin冲突
- 谷歌镜像
- Python学习笔记
- shutdown
- GitHub上史上最全的Android开源项目分类汇总
- Oracle创建表空间,用户,分配权限
- Hdu 2015 Multi-University Training Contest6
- eclipse从数据库逆向生成Hibernate实体类
- FileToData与DataToFile(优化版,txt为原始文件2倍大小)
- 如何运行代码apk安装
- 看懂java的class文件(字节码)(好)
- Java开发中的23种设计模式详解
- Dsploit
- Java线程的5种状态及切换(透彻讲解)
- git 和github教程