#include<stdio.h>
#include<string.h>
#define M 1030
int c[M][M];
int LB[M];
int n;
void Update(int x,int y,int k)
{
int i,j;
x++;
y++;
while(x<=n)
{
int t=y;
while(t<=n)
{
c[x][t]+=k;
t+=LB[t];
}
x+=LB[x];
}
}
int sum(int x,int y)
{
int s=0;
x++;
y++;
while(x>0)
{
int t=y;
while(t>0)
{
s+=c[x][t];
t-=LB[t];
}
x-=LB[x];
}
return s;
}
int main()
{
int t;
int i,j;
while(scanf("%d",&t)){
if(t==3) break;
if(t==0)
{
scanf("%d",&n);
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
c[i][j]=0;
for(i=1;i<=n;i++)
LB[i]=i&(-i);
}
else if(t==1)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
Update(a,b,c);
}
else if(t==2)
{
int x1,y1,x2,y2;
int ans,ans1,ans2,ans3;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
ans=sum(x2,y2);
ans1=sum(x1-1,y1-1);
ans2=sum(x1-1,y2);
ans3=sum(x2,y1-1);
printf("%d\n",ans-ans2-ans3+ans1);
}
}
return 0;
}
POJ 1195 二维树状数组
最新推荐文章于 2022-02-25 19:38:17 发布