树状数组 模板
2016-10-07 14:15
176 查看
lowbit(x) = i & -i; 一个数的负数等于这个数的二进制取反+1
一维
void uptree(int i,int val)
{
while (i<=n)
{
tree[i]+=val;
i+=i&-i;
}
}
int sum(int i)
{
int s=0;
while (i>0)
{
s+=tree[i];//1~i的区间和
i-=i&-i;
}
return s;
}
二维
void uptree(int x1,int y1,int val)
{
int x=x1;
while (x<=N)
{
int y=y1;
while (y<=N)
{
tree[x][y]+=val;
y+=y&-y;
}
x+=x&-x;
}
}
int sum(int x1,int y1)
{
int s=0;
int x=x1;
while (x>0)
{
int y=y1;
while (y>0)
{
s+=tree[x][y];
y-=y&-y;
}
x-=x&-x;
}
return s;
}
一维
void uptree(int i,int val)
{
while (i<=n)
{
tree[i]+=val;
i+=i&-i;
}
}
int sum(int i)
{
int s=0;
while (i>0)
{
s+=tree[i];//1~i的区间和
i-=i&-i;
}
return s;
}
二维
void uptree(int x1,int y1,int val)
{
int x=x1;
while (x<=N)
{
int y=y1;
while (y<=N)
{
tree[x][y]+=val;
y+=y&-y;
}
x+=x&-x;
}
}
int sum(int x1,int y1)
{
int s=0;
int x=x1;
while (x>0)
{
int y=y1;
while (y>0)
{
s+=tree[x][y];
y-=y&-y;
}
x-=x&-x;
}
return s;
}
相关文章推荐
- 树状数组(模板)
- 模板:二维树状数组 【洛谷P4054】 [JSOI2009]计数问题
- 【模板】树状数组 单点修改,区间求和 (模板题:洛谷P3374树状数组1)
- 【模板】逆序对(树状数组)
- HDU 2642 Stars(二维树状数组 模板题)
- 树状数组模板
- 【模板】树状数组 区间修改,区间求和 (模板题:洛谷P3368树状数组2)
- bzoj 3132 上帝造题的七分钟(二维树状数组区间修改区间查询模板)
- 树状数组求逆序数的模板
- poj 1195 二维树状数组 及二维树状数组模板
- 树状数组模板(区间更新单点查询)
- Mobile phones POJ1195(二维树状数组模板题)
- 树状数组模板区间更新 区间询问大全
- 树状数组【模板】
- 树状数组模板
- 树状数组模板1——单点修改区间查询
- 线段树+差分——【模板】树状数组2
- 【模板】树状数组1
- 树状数组模板
- 树状数组模板(水)