1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #include "iostream" #include "cstring" #include "cstdlib" #include "algorithm" using namespace std; const int maxn = 1050; int B[maxn][maxn]; inline int lowbit(int x){return x&(-x);} inline void zero(){memset(B,0,sizeof(B));} inline void update(int x,int y,int d){ for(int i = x; i < maxn; i+=lowbit(i)) for(int j = y; j < maxn; j+=lowbit(j)) B[i][j] += d; } inline int query(int x,int y){ if(x <= 0 || y <= 0) return 0; int ans=0; for(int i = x; i > 0; i-=lowbit(i)) for(int j = y; j > 0; j-=lowbit(j)) ans += B[i][j]; return ans; } inline int query(int x1,int y1,int x2,int y2){ return query(x2,y2) + query(x1-1,y1-1) - query(x2,y1-1) - query(x1-1,y2); }
int main() { int op,x1,y1,a,x2,y2; while(~scanf("%d",&op)){ if(op == 0) scanf("%d",&a),zero(); else if(op == 1) scanf("%d%d%d",&x1,&y1,&a),update(x1+2,y1+2,a); else if(op == 2) scanf("%d%d%d%d",&x1,&y1,&x2,&y2),printf("%d\n",query(x1+2,y1+2,x2+2,y2+2)); else return 0; } return 0; }
|