【bzoj3132】上帝造题的七分钟
来源:互联网 发布:2017软件测评师真题 编辑:程序博客网 时间:2024/04/30 05:08
Description
“第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵。
第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作。
第三分钟,k说,要能查询,于是便有了求给定矩形区域内的全部数字和的操作。
第四分钟,彩虹喵说,要基于二叉树的数据结构,于是便有了数据范围。
第五分钟,和雪说,要有耐心,于是便有了时间限制。
第六分钟,吃钢琴男说,要省点事,于是便有了保证运算过程中及最终结果均不超过32位有符号整数类型的表示范围的限制。
第七分钟,这道题终于造完了,然而,造题的神牛们再也不想写这道题的程序了。”
——《上帝造裸题的七分钟》
所以这个神圣的任务就交给你了。
Input
输入数据的第一行为X n m,代表矩阵大小为n×m。
从输入数据的第二行开始到文件尾的每一行会出现以下两种操作:
L a b c d delta —— 代表将(a,b),(c,d)为顶点的矩形区域内的所有数字加上delta。
k a b c d —— 代表求(a,b),(c,d)为顶点的矩形区域内所有数字的和。
请注意,k为小写。
Output
针对每个k操作,在单独的一行输出答案。
Sample Input
X 4 4
L 1 1 3 3 2
L 2 2 4 4 1
k 2 2 3 3
Sample Output
12
HINT
对于100%的数据,1 ≤ n ≤ 2048, 1 ≤ m ≤ 2048, 1 ≤ abs(delta) ≤ 500,操作不超过200000个,保证运算过程中及最终结果均不超过32位带符号整数类型的表示范围。
题解
代码
#include<bits/stdc++.h>#define inf 100000000#define ll long long#define mo 1000000007#define N 50005using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int a,b,c,d,v,n,m;int t[5][2050][2050];char ch[10];inline int lowbit(int x){return x&(-x);}void update(int opt,int x,int y,int z){ for (int i=x;i<=n;i+=lowbit(i)) for (int j=y;j<=m;j+=lowbit(j)) t[opt][i][j]+=z;}int getsum(int opt,int x,int y){ int ans=0; for (int i=x;i;i-=lowbit(i)) for (int j=y;j;j-=lowbit(j)) ans+=t[opt][i][j]; return ans;}int get(int x,int y){ return getsum(1,x,y)*(x*y+x+y+1)-getsum(2,x,y)*(y+1)-getsum(3,x,y)*(x+1)+getsum(4,x,y);}int main(){ n=read();m=read(); while (scanf("%s",ch)!=EOF) { a=read();b=read();c=read();d=read(); if (ch[0]=='L') { v=read(); update(1,a,b,v);update(1,c+1,b,-v);update(1,a,d+1,-v);update(1,c+1,d+1,v); update(2,a,b,v*a);update(2,c+1,b,-v*(c+1));update(2,a,d+1,-v*a);update(2,c+1,d+1,v*(c+1)); update(3,a,b,v*b);update(3,c+1,b,-v*b);update(3,a,d+1,-v*(d+1));update(3,c+1,d+1,v*(d+1)); update(4,a,b,v*a*b);update(4,c+1,b,-v*(c+1)*b);update(4,a,d+1,-v*a*(d+1));update(4,c+1,d+1,v*(c+1)*(d+1)); } else { printf("%d\n",get(c,d)-get(c,b-1)-get(a-1,d)+get(a-1,b-1)); } } return 0;}
阅读全文
0 0
- [BZOJ3132] 上帝造题的七分钟
- 【BZOJ3132】上帝造题的七分钟
- [BZOJ3132]上帝造题的七分钟
- BZOJ3132上帝造题的七分钟
- 【bzoj3132】上帝造题的七分钟
- 【BZOJ3132】上帝造题的七分钟
- bzoj3132上帝造题的七分钟 二维树状数组
- BZOJ3132 上帝造题的七分钟 【二维树状数组】
- 【BZOJ3132】【TYVJ1716】上帝造题的七分钟 二维树状数组
- 【bzoj3038】 上帝造题的七分钟2
- [BZOJ3038][线段树]上帝造题的七分钟2
- bzoj3038 上帝造题的七分钟2
- BZOJ 3038: 上帝造题的七分钟2
- 【BZOJ3038】【Codevs2492】上帝造题的七分钟2
- 【树状数组】[CQBZOJ2719]上帝造题的七分钟I
- BZOJ3038上帝造题的七分钟2
- [BZOJ3038]上帝造题的七分钟2
- codevs2492 上帝造题的七分钟 2
- Python :从尾到头打印链表
- Bayes 分类算法
- Python学习06-文件I/O
- 带你领略Linux系统发展及版本更迭
- JavaScript循环刷新页面
- 【bzoj3132】上帝造题的七分钟
- C++实现RSA加密解密
- css属性总结(一)
- Java代理模式简单整理
- Homing 使用初始值
- 新兴机器学习算法:从无监督降维到监督降维
- Android 优秀的第三方UI库集锦
- 对面向对象设计的理解—Java接口和Java抽象类
- c++ web framework