[BZOJ3132]上帝造题的七分钟
来源:互联网 发布:网络映射 编辑:程序博客网 时间:2024/04/30 01:54
原题地址
维护一个矩阵,支持范围加和范围求和.
据说二维线段树做不了,用二维树状数组类似一维的差分序列技巧处理即可.
AC code:
#include <cstdio>const int N=2049;int n,m,a,b,c,d,v;int D[N][N],ID[N][N],JD[N][N],IJD[N][N];char t;void add(int T[][N],int x,int y,int v){ for(int i=x;i<=n;i+=i&-i) for(int j=y;j<=m;j+=j&-j) T[i][j]+=v;}int get(int T[][N],int x,int y){ int sum=0; for(int i=x;i;i-=i&-i) for(int j=y;j;j-=j&-j) sum+=T[i][j]; return sum;}void Add(int x,int y,int v){ add(D,x,y,v); add(ID,x,y,x*v); add(JD,x,y,y*v); add(IJD,x,y,x*y*v);}int Get(int x,int y){ return (x*y+x+y+1)*get(D,x,y)-(y+1)*get(ID,x,y)-(x+1)*get(JD,x,y)+get(IJD,x,y);}int main(){ scanf("%c %d%d",&t,&n,&m); while(scanf("\n%c ",&t)!=EOF){ if(t=='L'){ scanf("%d%d%d%d%d",&a,&b,&c,&d,&v); Add(a,b,v);Add(a,d+1,-v);Add(c+1,b,-v);Add(c+1,d+1,v); } else{ scanf("%d%d%d%d",&a,&b,&c,&d); 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
- java不同安装包的安装方法(rpm,bin,tar)
- SQL中存储过程和函数的区别
- thttpd服务器移植到ARM Linux教程
- hdu 1151 Air Raid DAG最小路径覆盖
- ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.10.210' (111) 解决方法
- [BZOJ3132]上帝造题的七分钟
- 题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值
- HDU_P2438 Turn the corner(三分)
- Cocoapods 安装的步骤
- 图像亮度、对比度调节(伽马校正)
- android动画详解三 动画API概述
- hdu 5646DZY Loves Partition(构造)
- Installation You-get with Ubuntu 16.04 beta
- 父子控制器