Two-dimensional tree-like array
#include <iostream>#include<cstdio>#include<cstring>#include<map>#include<algorithm>using namespacestd;intN;intc[1030][1030];intLowbit (intk) { returnk& (-k);}voidAddintXintYintnum) { for(inti = x;i <= n;i + =lowbit (i)) for(intj = Y;j <= n;j + =Lowbit (j)) C[i][j]+=num;}voidSubintXintYintnum) { for(inti = X;i >=0; I-=lowbit (i)) for(intj = Y;j >=0; J-=Lowbit (j)) C[i][j]-=num;}intCalintXinty) { intsum =0; for(inti = x;i >0; I-=lowbit (i)) for(intj = y;j >0; J-=Lowbit (j)) Sum+=C[i][j]; returnsum;}intMain () {intfirst,op,size; scanf ("%d%d",&first,&N); {Size=N; Memset (c,0,sizeof(c)); for(inti =1; I <= size;i++) for(intj =1; J <= size;j++) Add (I,j,first); intop; while(SCANF ("%d", &op)! =EOF) { if(OP = =1) { intX,y,a; scanf ("%d%d%d",&x,&y,&a); X++,y++; Add (X,y,a); } Else if(OP = =2) { intX1,y1,x2,y2; scanf ("%d%d%d%d",&x1,&y1,&x2,&y2); X1++,y1++,x2++,y2++; intsum = Cal (x2,y2) + cal (x1-1, y1-1)-Cal (x2,y1-1)-Cal (x1-1, y2); printf ("%d\n", sum); } Else Break; } }}
POJ 1195 Mobile Phones