POJ 1195 二维树状数组
来源:互联网 发布:全文免费阅读软件 编辑:程序博客网 时间:2024/04/27 17:52
这道题教我们怎么使用二维的树状数组。
#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 2155 二维树状数组 poj 1195 二维树状数组
- POJ 1195 二维树状数组
- POJ 1195 二维树状数组
- POJ 1195 二维树状数组
- Poj 1195 二维树状数组
- POJ 1195 二维树状数组
- 【二维树状数组】POJ 1195
- POJ 1195 二维树状数组
- poj 1195 二维树状数组
- POJ 1195 二维树状数组
- POJ 1195 二维树状数组
- POJ 1195 二维树状数组
- POJ-1195-二维树状数组
- poj 1195 二维树状数组 及二维树状数组模板
- POJ 2352 Stars 树状数组 与 1195二维树状数组
- POJ 1195 Mobile phones 二维树状数组
- POJ 1195 Mobile phones【二维树状数组】
- POJ 1195 Mobile phones 二维树状数组
- XOJ 1063 TSP的dp做法
- POJ 3624 0-1背包问题
- 学习PKI的一些心得与思考(1)
- 内存泄漏定位
- 如何判断big-endian
- POJ 1195 二维树状数组
- 寻找水王
- 环链表、相交链表的问题
- 人到底是不是"东西"
- POJ 1050 最大子矩阵和
- POJ 2479 最大子段和dp
- 性能测试
- POJ1151 离散化
- 虚拟化下的进程演变(一)-移民问题