点击打开链接
题意:
给你一个n*n的矩阵进行操作,
1 x, y, a, -将右下角的矩阵+a;
2 x,y,xx,yy 求(x,y)和(xx,yy)构成的矩阵的和。。。
将sum和add都换为而二维的就行了。。
#include"stdio.h" #include"string.h" #include"algorithm" using namespace std; #define N 1025 int A[N][N]; int n; int bit(int x) { return x&(-x); } int sum(int x,int y) { int ans=0; for(int i=x;i>0;i-=bit(i)) { for(int j=y;j>0;j-=bit(j)) ans+=A[i][j]; } return ans; } void add(int x,int y,int a) { for(int i=x;i<=n;i+=bit(i)) { for(int j=y;j<=n;j+=bit(j)) A[i][j]+=a; } } int main() { int i,t; int x,y,xx,yy; while(scanf("%d",&t)!=-1) { if(t==0) { scanf("%d",&n); memset(A,0,sizeof(A)); } if(t==1) { scanf("%d%d%d",&x,&y,&i); x++;y++; add(x,y,i); } if(t==2) { scanf("%d%d%d%d",&x,&y,&xx,&yy); x++;y++;xx++;yy++; printf("%d\n",sum(xx,yy)+sum(x-1,y-1)-sum(x-1,yy)-sum(xx,y-1)); } if(t==3)break; } return 0; }