//Tree[i][j]=lowbit(i)*lowbit(j); 或 //先赋值为0; 每个位置放一本 /*void init() { int i,j; for(i=1;i<=1001;i++) { for(j=1;j<=1001;j++) { a[i][j]=1; Tree[i][j]=0; } } for(i=1;i<=1001;i++) { for(j=1;j<=1001;j++) { modify(i,j,1); } } }*/ #include <iostream> using namespace std; const int MAX=1002; int n; int a[MAX][MAX]; int Tree[MAX][MAX]; #define max(a,b)(a>b?a:b) #define min(a,b)(a<b?a:b) int lowbit(int i) { return i&(-i); } void init() { int i,j; for(i=1;i<=1001;i++) { for(j=1;j<=1001;j++) { a[i][j]=1; Tree[i][j]=lowbit(i)*lowbit(j); } } } void modify(int x,int y,int num) { int i,j; for(i=x;i<=1001;i+=lowbit(i)) { for(j=y;j<=1001;j+=lowbit(j)) { Tree[i][j]+=num; } } } int sum(int x,int y) { int i,j,s=0; for(i=x;i>0;i-=lowbit(i)) { for(j=y;j>0;j-=lowbit(j)) { s+=Tree[i][j]; } } return s; } void run(int Case) { int x1,y1,x2,y2,num,i; char cmd; printf("Case %d:\n",Case); init(); int m; scanf("%d",&m); for(i=0;i<m;i++) { cin>>cmd; if(cmd=='S') { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); x1++; y1++; x2++; y2++; int minx,miny,maxx,maxy; //要比较大小!!! minx=min(x1,x2); miny=min(y1,y2); maxx=max(x1,x2); maxy=max(y1,y2); int ans=sum(maxx,maxy)-sum(maxx,miny-1)-sum(minx-1,maxy)+sum(minx-1,miny-1); printf("%d\n",ans); } else if(cmd=='A') { scanf("%d%d%d",&x1,&y1,&num); x1++; y1++; a[x1][y1]+=num; modify(x1,y1,num); } else if(cmd=='D') { scanf("%d%d%d",&x1,&y1,&num); x1++; y1++; if(a[x1][y1]<num) num=a[x1][y1]; a[x1][y1]-=num; modify(x1,y1,-num); } else { scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&num); x1++; x2++; y1++; y2++; if(a[x1][y1]<num) num=a[x1][y1]; a[x1][y1]-=num; a[x2][y2]+=num; modify(x1,y1,-num); modify(x2,y2,num); } } } int main() { int T; cin>>T; for(int i=0;i<T;i++) run(i+1); return 0; }