p1358
这是一道二维树状数组模板题。
需要注意的可能只有这些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; } } }