这是道模版题,直接套模版就好了。。。。
注意:我用的树状数组下标是从1开始的,而题目给定是从0开始的,所以有时要+1
#include<stdio.h> #define N 1100 int n; int bit[N][N]; void add(int x,int y,int v) { int i,j; for(i=x;i<=n;i+=i&-i) for(j=y;j<=n;j+=j&-j) bit[i][j]+=v; } int sum(int x,int y) { int res=0,i,j; for(i=x;i>0;i-=i&-i) for(j=y;j>0;j-=j&-j) res+=bit[i][j]; return res; } int main(void) { int judge,c,x1,y1,x2,y2,i,j; scanf("%d%d",&judge,&n); while(~scanf("%d",&judge)&&judge!=3) { if(judge==1) { scanf("%d%d%d",&x1,&y1,&c); add(x1+1,y1+1,c); } else { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); printf("%d\n",sum(x2+1,y2+1)-sum(x2+1,y1)-sum(x1,y2+1)+sum(x1,y1)); } } }