HDU 3584 三维树状数组
三维树状数组模版。优化不动了。
#include <set>
#include <map>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <string>
#include <vector>
#include <iomanip>
#include <cstring>
#include <iostream>
#include <algorithm>
#define Max 2505
#define FI first
#define SE second
#define ll long long
#define PI acos(-1.0)
#define inf 0x3fffffff
#define LL(x) ( x << 1 )
#define bug puts("here")
#define PII pair<int,int>
#define RR(x) ( x << 1 | 1 )
#define mp(a,b) make_pair(a,b)
#define mem(a,b) memset(a,b,sizeof(a))
#define REP(i,s,t) for( int i = ( s ) ; i <= ( t ) ; ++ i )using namespace std;int n , m ;
int c[101][101][101] ;
inline void RD(int &ret) {char c;do {c = getchar();} while(c < '0' || c > '9') ;ret = c - '0';while((c=getchar()) >= '0' && c <= '9')ret = ret * 10 + ( c - '0' );
}inline void OT(int a) {if(a >= 10)OT(a / 10) ;putchar(a % 10 + '0') ;
}
void update(int x , int y ,int z) {for (int i = x ; i <= n ; i += i & (-i) )for (int j = y ; j <= n ; j += j & (-j))for (int k = z ; k <= n ; k += k & (-k))c[i][j][k] ++ ;
}
bool query(int x ,int y,int z) {int ans = 0 ;for (int i = x ; i >= 1 ; i -= i & (-i))for (int j = y ; j >=1 ; j -= j & (-j))for (int k = z ; k >= 1 ; k -= k & (-k))ans += c[i][j][k] ;return ans & 1 ;
}
void init() {for (int i = 0 ; i <= n ; i ++ )for (int j = 0 ; j <= n ; j ++ )for (int k = 0 ; k <= n ; k ++ )c[i][j][k] = 0 ;
}
int main() {int x , y , z ;int xx , yy , zz ;int op ;while(scanf("%d%d",&n,&m) == 2) {while(m -- ) {RD(op) ;if(op & 1) {RD(x) ;RD(y) ;RD(z) ;RD(xx) ;RD(yy) ;RD(zz) ;update(x , y , z ) ;update(xx + 1 , y , z ) ;update(xx + 1 , yy + 1 , z ) ;update(xx + 1 , yy + 1 , zz + 1 ) ;update(xx + 1 , y , zz + 1 ) ;update(x , y , zz + 1 ) ;update(x , yy + 1 , zz + 1 ) ;update(x , yy + 1 , z ) ;} else {RD(x) ;RD(y) ;RD(z) ;OT(query(x , y , z)) ;putchar('\n') ;}}init() ;}return 0 ;
}
HDU 3584 三维树状数组相关推荐
- 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 ...
- HDU 6681(树状数组统计平面内射线的交点个数)
HDU 6681(树状数组,统计平面内射线的交点个数) 题目链接:传送门 题意:给出k条射线,求射线将n∗mn*mn∗m 的区域分成几个联通块.每两条射线的端点x坐标和y坐标都互不相同. 思路:根据 ...
- hdu 5497 Inversion(树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5497 解题思路: 用树状数组维护一段区间L,区间长度为m,依次枚举该区间的终点ai,即将该点加入到区间 ...
- C - Group HDU - 4638[离线+树状数组]
感觉比较抽象:举个例子:a[] = {3 1 2 5 4} 树状数组里面:1,1,-1,1,-1 sum(2):就是[1,2]区间能分成多少个连续的段:1和3 sum(3):1 2 3是一段 如果是询 ...
- HDU 4638 Group 树状数组 + 思路
实际上就是问这个区间编号连续的段的个数,假如一个编号连续的段有(a+b)个人,我把他们分在同一组能得到的分值为(a+b)^2,而把他们分成人数为a和b的两组的话,得到的分值就是a^2+b^2,显然(a ...
- hdu 5542(树状数组优化dp)
题意: 求n个数中长度为m的上升子序列的个数 解题思路:dp[i][j]表示第i个数长度为j的上升序列的个数.dp[i][j] = sum{dp[k][j-1] | a[k] < a[i]},这 ...
- HDU 4325 离散化+树状数组 或者 不使用树状数组
题意:给出一些花的开放时间段,然后询问某个时间点有几朵花正在开放. 由于ti<1e9,我们需要先将时间离散化,然后将时间点抽象为一个数组中的点,显然,我们需要进行区间更新和单点查询,可以考虑线段 ...
- Billboard HDU - 2795(树状数组,单点修改,区间查询)
题目链接:https://vjudge.net/problem/HDU-2795 思路:h = 1e9行不通,因为广告是1*w的,所以n个广告最多只需要 h = n的高度,那么h=2e5就可以接受了. ...
- HDU 4125 Moles 树状数组 + KMP
这题的重点就在于建树, 题目读懂以后, 就会发现, 树建好以后就是一颗排序二叉树. 于是每次用树状数组二分找该节点的插入点. 树建完以后DFS得到字符串, 由于节点非常多, 于是要手写栈. 字符串得到 ...
最新文章
- 《小团团团队》第五次作业:项目需求分析改进与系统设计
- C# 窗体位置 Show和ShowDialog (转载)
- 程序员和产品经理的恩怨情仇 | 每日趣闻
- java base64 压缩_在线等(急)Base64(带压缩)出问题
- endnote咋手动输入文献_EndNote 如何在 Word 中手动输入引文
- Java提高篇 —— Java浅拷贝和深拷贝
- CentOS6.0 yum php mcrypt 扩展安装问题
- 深度剖析:Redis 分布式锁到底安全吗?看完这篇文章彻底懂了!
- 如何查看SQL Server2000执行过的SQL语句
- 浅谈API测试与UI Auomation一点心得
- qt 的进程间共享内存 QSharedMemory
- mysql 2037年,正确的方法来存储2037年之后的MySQL日期
- ethtool 开启网卡_技术|如何使用 ethtool 命令管理以太网卡
- 以太网没有有效IP配置问题
- Linkflow新锐洞察 06 | DTC品牌如何快速规模化?
- 2019年深度学习自然语言处理最新十大发展趋势
- C numi和弓道 双指针(2020牛客寒假基础训练营1 )
- 食品加工企业自营商城小程序开发,帮助企业增加销售渠道,提高销量
- 系统分析师-2022年上半年必考知识点
- 【KEIL-MDK】系列——主题配色
热门文章
- Codeforces Gym 100338H High Speed Trains 组合数学+dp+高精度
- android sdkversion
- HDU-1671 Phone List 暴力版 + 字典树
- [Oracle][Standby][PDB]在PDB中修改参数,设置范围为 SPFILE,报 ORA-65099错误
- CSS3实现垂直居中
- JAVA学习笔记-this隐式参数
- C#程序通过模板自动创建Word文档.doc
- android sdk 帮助文档下载地址
- ref out的用法
- 微软.net framework工具集帮助