忘记了单点更新时要在树状数组中减去原值。。wa了一发
/* 矩形求和,单点更改 */ #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; #define maxn 1030 int bit[maxn][maxn],n; void add(int x,int y,int num){ for(int i=x;i<=n;i+=i&-i) for(int j=y;j<=n;j+=j&-j) bit[i][j]+=num; } int query(int x,int y){ int res=0; for(int i=x;i;i-=i&-i) for(int j=y;j;j-=j&-j) res+=bit[i][j]; return res; } int mp[maxn][maxn]; int main(){ int t,x,y,num,x1,x2,y1,y2; char op[10]; scanf("%d",&t); while(t--){ memset(bit,0,sizeof bit); memset(mp,0,sizeof mp); scanf("%d",&n); while(scanf("%s",op)){ if(op[0]=='E') break; if(op[2]=='T'){ scanf("%d%d%d",&x,&y,&num); x++;y++; add(x,y,-mp[x][y]); add(x,y,num); mp[x][y]=num; } else { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); x1++,x2++,y1++,y2++; int ans=0; ans=query(x2,y2)-query(x2,y1-1)-query(x1-1,y2)+query(x1-1,y1-1); printf("%d\n",ans); } } } }
转载于:https://www.cnblogs.com/zsben991126/p/10083852.html
相关资源:各显卡算力对照表!