【bzoj 3132】上帝造题的七分钟(二维树状数组)
2017-10-08 21:02
465 查看
传送门biu~
#include<bits/stdc++.h> #define lowbit(x) (x&(-x)) using namespace std; int n,m; struct tree{ int a[2050][2050]; void add(int x,int y,int v){ for(int i=x;i<=n;i+=lowbit(i)) for(int j=y;j<=m;j+=lowbit(j)) a[i][j]+=v; } int search(int x,int y){ int re=0; for(int i=x;i;i-=lowbit(i)) for(int j=y;j;j-=lowbit(j)) re+=a[i][j]; return re; } }a,bi,bj,c; inline void add(int x1,int yl,int x2,int y2,int val){ a.add(x1,yl,val); a.add(x2+1,y2+1,val); a.add(x1,y2+1,-val); a.add(x2+1,yl,-val); bi.add(x1,yl,val*x1); bi.add(x2+1,y2+1,val*(x2+1)); bi.add(x1,y2+1,-val*x1); bi.add(x2+1,yl,-val*(x2+1)); bj.add(x1,yl,val*yl); bj.add(x2+1,y2+1,val*(y2+1)); bj.add(x1,y2+1,-val*(y2+1)); bj.add(x2+1,yl,-val*yl); c.add(x1,yl,val*x1*yl); c.add(x2+1,y2+1,val*(x2+1)*(y2+1)); c.add(x1,y2+1,-val*x1*(y2+1)); c.add(x2+1,yl,-val*(x2+1)*yl); } inline int search(int x,int y){return a.search(x,y)*(x+1)*(y+1)+c.search(x,y)-bi.search(x,y)*(y+1)-bj.search(x,y)*(x+1);} int main(){ char opt; scanf("%s%d%d",&opt,&n,&m); while(~scanf("%s",&opt)){ if(opt=='L'){ int x1,yl,x2,y2,val; scanf("%d%d%d%d%d",&x1,&yl,&x2,&y2,&val); add(x1,yl,x2,y2,val); } else{ int x1,yl,x2,y2; scanf("%d%d%d%d",&x1,&yl,&x2,&y2); int ans=search(x2,y2)+search(x1-1,yl-1)-search(x1-1,y2)-search(x2,yl-1); printf("%d\n",ans); } } return 0; }
相关文章推荐
- BZOJ 3132 上帝造题的七分钟(二维树状数组)
- bzoj 3132: 上帝造题的七分钟 (二维树状数组)
- bzoj3132上帝造题的七分钟 二维树状数组
- 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询
- BZOJ_3132_上帝造题的七分钟_树状数组
- bzoj 3132 上帝造题的七分钟(二维树状数组区间修改区间查询模板)
- BZOJ 3132: 上帝造题的七分钟( 二维BIT )
- [bzoj3132]上帝造题的七分钟——二维树状数组
- BZOJ 3132: 上帝造题的七分钟【树状数组(二维区间加,区间查询
- 【BZOJ3132】【TYVJ1716】上帝造题的七分钟 二维树状数组
- BZOJ3132 上帝造题的七分钟 【二维树状数组】
- 【BZOJ 3132】上帝造题的七分钟【二维树状数组】
- BZOJ3132 上帝造题的七分钟 【二维树状数组】
- BZOJ 3132(上帝造题的七分钟-树状数组求和+2D逆求和数组)
- 二维树状数组总结&&【洛谷P4514】 上帝造题的七分钟
- 【数据结构】BZOJ3132 上帝造题的七分钟 题解
- [BZOJ3132] 上帝造题的七分钟
- 【BZOJ3132】上帝造题的七分钟 树状数组
- [TYVJ P1716/BZOJ 3132 上帝造题的七分钟] 二维树状数组区间修改、区间查询
- BZOJ 3132(上帝造题的七分钟-树状数组求和+2D逆求和数组)