本文共 1394 字,大约阅读时间需要 4 分钟。
#include#include #include #include #include using namespace std;int map[1005][1005],map1[1005][1005];;int lowbit(int x){ return x&(-x);}void add(int x,int y,int num){ for(int i = x; i <=1001; i+=lowbit(i)) for(int j = y; j <= 1001; j+=lowbit(j)) map[i][j] += num;}int getsum(int x,int y){ int res = 0; for(int i = x; i > 0; i -= lowbit(i)) for(int j = y; j > 0; j -= lowbit(j)) res += map[i][j]; return res;}int main(){ int A = 1001; int t,n,Case = 1; scanf("%d",&t); while(t--) { printf("Case %d:\n",Case++); memset(map,0,sizeof(map)); for(int i=1; i<=A; i++) for(int j=1; j<=A; j++) { add(i,j,1); map1[i][j]=1; } cin>>n; int x1,x2,y1,y2,w; while(n--) { char op; cin>>op; if(op=='A') { scanf("%d%d%d",&x1,&y1,&w); x1++,y1++; add(x1,y1,w); map1[x1][y1]+=w; } else if(op=='D') { scanf("%d%d%d",&x1,&y1,&w); x1++,y1++; if(map1[x1][y1] x2)swap(x1,x2); if(y1>y2)swap(y1,y2); int sum=getsum(x2,y2)-getsum(x2,y1-1)-getsum(x1-1,y2)+getsum(x1-1,y1-1); printf("%d\n",sum); } } }}
转载地址:http://hysgi.baihongyu.com/