POJ 1195 二维树状数组
2010-02-09 00:16
232 查看
这道题教我们怎么使用二维的树状数组。
#include <cstdio>
int lowerbit(int a)
{
return (a ^ (a & (a - 1)));
}
int n,c[1025][1025];
void add(int x,int y,int delta)
{
int y_save = y;
for (; x <= n; x += lowerbit(x))
{
y = y_save;
for (; y <= n; y += lowerbit(y))
{
c[x][y] += delta;
}
}
}
int getsum(int x,int y)
{
if (!x || !y)
{
return 0;
}
int sum = 0;
int y_save = y;
for (; x > 0; x -= lowerbit(x)) //&=~lowbit(x)
{
y = y_save;
for (; y > 0; y -= lowerbit(y))//&=~lowbit(x)
{
sum += c[x][y];
}
}
return sum;
}
int getsum(int x0,int y0,int x1,int y1)
{
return getsum(x1,y1) - getsum(x0 - 1,y1) - getsum(x1,y0 - 1) + getsum(x0 - 1,y0 - 1);
}
int main(void)
{
int i,j,x0,y0,x1,y1,t,delta;
while (EOF != scanf("%d",&t))
{
if (t == 0)
{
scanf("%d",&n);
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
{
c[i][j] = 0;
}
}
else if (t == 1)
{
scanf("%d%d%d",&x0,&y0,&delta);
if (delta)
{
add(x0 + 1,y0 + 1,delta);
}
}
else if (t == 2)
{
scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
printf("%d/n",getsum(x0 + 1,y0 + 1,x1 + 1,y1 + 1));
}
else
{
continue;
}
}
return 0;
}
#include <cstdio>
int lowerbit(int a)
{
return (a ^ (a & (a - 1)));
}
int n,c[1025][1025];
void add(int x,int y,int delta)
{
int y_save = y;
for (; x <= n; x += lowerbit(x))
{
y = y_save;
for (; y <= n; y += lowerbit(y))
{
c[x][y] += delta;
}
}
}
int getsum(int x,int y)
{
if (!x || !y)
{
return 0;
}
int sum = 0;
int y_save = y;
for (; x > 0; x -= lowerbit(x)) //&=~lowbit(x)
{
y = y_save;
for (; y > 0; y -= lowerbit(y))//&=~lowbit(x)
{
sum += c[x][y];
}
}
return sum;
}
int getsum(int x0,int y0,int x1,int y1)
{
return getsum(x1,y1) - getsum(x0 - 1,y1) - getsum(x1,y0 - 1) + getsum(x0 - 1,y0 - 1);
}
int main(void)
{
int i,j,x0,y0,x1,y1,t,delta;
while (EOF != scanf("%d",&t))
{
if (t == 0)
{
scanf("%d",&n);
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
{
c[i][j] = 0;
}
}
else if (t == 1)
{
scanf("%d%d%d",&x0,&y0,&delta);
if (delta)
{
add(x0 + 1,y0 + 1,delta);
}
}
else if (t == 2)
{
scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
printf("%d/n",getsum(x0 + 1,y0 + 1,x1 + 1,y1 + 1));
}
else
{
continue;
}
}
return 0;
}
相关文章推荐
- poj 1195 Mobile phones(二维树状数组)
- poj 1195 Mobile phones(二维树状数组)
- poj_1195Mobile phones,二维树状数组
- POJ 1195 Mobile phones(二维树状数组)
- POJ 1195 Mobile phones(二维树状数组)
- POJ Mobile phones(1195)(二维树状数组)
- poj 1195 Mobile phones(二维树状数组)
- poj 1195 Mobile phones(二维树状数组)
- poj1195 Mobile phones(二维树状数组)
- POJ 1195 Mobile phones (二维树状数组)
- POJ 1195 Mobile phones(二维树状数组)
- POJ - 1195 Mobile phones解题报告(二维树状数组)
- poj 1195(二维树状数组)
- POJ 1195 Mobile phones(二维树状数组)
- poj-1195-Mobile phones(二维树状数组)
- poj 1195 Mobile phones(二维树状数组)
- poj 1195 Mobile phones(二维树状数组)
- poj 1195 Mobile phones(二维树状数组)
- POJ 1195 二维树状数组
- POJ 1195 Mobile phones (二维树状数组)