继续水题= =
还是TLE了一次!
树状数组的下标不能有0,可能是因为求Lowbit的地方?我YY的。。。
反正我就是把坐标都+1处理就AC了。。。
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 1050
using namespace std;
int c[maxn][maxn],m;
int Lowbit(int x)
{
return x&(x^(x-1));
}
int Getsum(int x,int y)
{
int ret = 0;
for(int i=x;i>0;i-=Lowbit(i))
{
for(int j=y;j>0;j-=Lowbit(j))
ret+=c[i][j];
}
return ret;
}
void update(int x,int y,int a)
{
for(int i=x;i<=m;i+=Lowbit(i))
{
for(int j=y;j<=m;j+=Lowbit(j))
c[i][j]=max(0,c[i][j]+a);
}
}
int main()
{
int n,x1,y1,x2,y2,x,y,a;
while(scanf("%d",&n)!=EOF)
{
if(n==3) break;
if(n==0)
{
scanf("%d",&m);
memset(c,0,sizeof(c));
}
if(n==1)
{
scanf("%d%d%d",&x,&y,&a);
x++,y++;
update(x,y,a);
}
else if(n==2)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1++,y1++,x2++,y2++;
int ans = Getsum(x2,y2)+Getsum(x1-1,y1-1)-Getsum(x1-1,y2)-Getsum(x2,y1-1);
printf("%d\n",ans);
}
}
return 0;
}