POJ 1195 二维树状数组
2012-10-20 11:12
260 查看
题意:现对矩阵进行以下操作。0,将一个方阵初始化为全0。1,某个位置的数加上一个值。2,询问某个区域的数字和。要求对每个询问求出其和。
使用二维树状数组即可
Matrix(x1, y1, x2, y2) = Sum(x2, y2) + Sum(x1-1, y1-1) – Sum(x2, y1-1) – Sum(x1-1, y2)
使用二维树状数组即可
Matrix(x1, y1, x2, y2) = Sum(x2, y2) + Sum(x1-1, y1-1) – Sum(x2, y1-1) – Sum(x1-1, y2)
#include<cstdio> #include<cstring> const int n_max=1056; int a[n_max][n_max]; int n; void insert(int x,int y,int t) { while(x<=n) { int temp=y; while(temp<=n) { a[x][temp]+=t; temp+=temp&(-temp); } x+=x&(-x); } } int sum(int x,int y) { int ret=0; while(x>0) { int temp=y; while(temp>0) { ret+=a[x][temp]; temp-=temp&(-temp); } x-=x&(-x); } return ret; } int main() { int op; while(true) { scanf("%d",&op); if(op==3) { break; } else if(op==0) { scanf("%d",&n); n++; memset(a,0,sizeof(a)); } else if(op==1) { int x,y,t; scanf("%d%d%d",&x,&y,&t); insert(x+1,y+1,t); } else if(op==2) { int x1,y1,x2,y2; scanf("%d%d%d%d",&x1,&y1,&x2,&y2); int prt=sum(x2+1,y2+1)-sum(x2+1,y1)-sum(x1,y2+1)+sum(x1,y1); printf("%d\n",prt); } } return 0; }
相关文章推荐
- poj 1195 Mobile phones(二维树状数组)
- poj 1195 Mobile phones (二维树状数组)
- poj-1195-Mobile phones(二维树状数组)
- poj 1195 Mobile phones(二维树状数组)
- POJ 1195 Mobile phones (二维树状数组或线段树)
- POJ 1195--Mobile phones (二维树状数组)
- poj1195——Mobile phones(二维树状数组)
- POJ 1195 Mobile phones 二维树状数组
- hdu 1541 Stars poj 1195 Mobile phones(二维) poj 2155 Matrix(二维) hdu 3584 Cube(三维) 树状数组
- poj 1195 Mobile phones(二维树状数组)
- poj 1195 Mobile phones 二维树状数组
- Poj1195(二维树状数组)
- poj 1195 Mobile phones(二维树状数组)
- poj 1195 Mobile phones (二维树状数组)
- poj 1195 二维树状数组 及二维树状数组模板
- POJ 1195——Mobile phones(二维树状数组)
- POJ 1195 Mobile phones 二维树状数组
- poj 1195 Mobile phones 二维树状数组
- poj 1195 Mobile phones(二维树状数组)
- POJ 1195 Mobile phones (二维树状数组)