这是一道二维树状数组模板题。
需要注意的可能只有这些xy有可能为零。那每次输入之后全部++,相当于全部向右下角移了一位。
那就直接给代码了呦。
using namespace std; int c[1050][1050],n,m; int i,f; int a1,b1,a2,b2,tx,ty,tk; int ans; int lowbit(int x) {return x&(-x); } int sum(int x,int y) {ans=0;for(i=x;i>=1;i-=lowbit(i))for(f=y;f>=1;f-=lowbit(f))ans+=c[i][f];return ans; } void add(int x,int y,int v) {for(i=x;i<=n;i+=lowbit(i))for(f=y;f<=n;f+=lowbit(f))c[i][f]+=v; } int main() { ios::sync_with_stdio(false); //freopen("123.in","r",stdin); //freopen("123.out","w",stdout);cin>>n;for(;;){cin>>m;if(m==3)return 0;if(m==1){cin>>tx>>ty>>tk;tx++;ty++;add(tx,ty,tk);}if(m==2){cin>>a1>>b1>>a2>>b2;a1++;b1++;a2++;b2++;cout<<abs(sum(a2,b2)-sum(a1-1,b2)-sum(a2,b1-1)+sum(a1-1,b1-1) )<<endl;}} }