树状数组(BIT)
2017-06-28 18:04
148 查看
树状数组(BIT)是能够完成下述操作的数据结构。
给定一个初始值全为0的数列a1,a2,a3,....,an
1.给定i,计算a1+a2+....+ai
2.给定i和x,执行ai+=x
BIT的求和:
计算前i项的和需要从i开始,不断把当前位置i的值加到结果中,并从i中减去i的二进制最低非0位对应的幂,直到i变成0为止。i的二进制的最后一个1可以通过i&-i得到。
int bit[MAX_N+1],n;
int sum(int i)
{
int s=0;
while(i>0)
{
s+=bit[i];
i-=i&-i;
}
return s;
}
BIT的值的更新:
使第i项的值增加x需要从i开始,不断把当前位置i的值增加x,并把i的二进制最低非0位对应的幂加到i上。
void add(int i,int x)
{
while(i<=n)
{
bit[i]+=x;
i+=i&-i;
}
}
复杂度O(logn)
给定一个初始值全为0的数列a1,a2,a3,....,an
1.给定i,计算a1+a2+....+ai
2.给定i和x,执行ai+=x
BIT的求和:
计算前i项的和需要从i开始,不断把当前位置i的值加到结果中,并从i中减去i的二进制最低非0位对应的幂,直到i变成0为止。i的二进制的最后一个1可以通过i&-i得到。
int bit[MAX_N+1],n;
int sum(int i)
{
int s=0;
while(i>0)
{
s+=bit[i];
i-=i&-i;
}
return s;
}
BIT的值的更新:
使第i项的值增加x需要从i开始,不断把当前位置i的值增加x,并把i的二进制最低非0位对应的幂加到i上。
void add(int i,int x)
{
while(i<=n)
{
bit[i]+=x;
i+=i&-i;
}
}
复杂度O(logn)
相关文章推荐
- HDU 5465——Clarke and puzzle——————【树状数组BIT维护前缀和+Nim博弈】
- 树状数组,二查索引树,BIT
- 树状数组 BIT (Binary Indexed Tree)
- 一维树状数组BIT
- 树状数组 BIT - 模板
- HDU1556 Color the ball(树状数组BIT 区间修改单点询问)
- [leetcode] 树状数组 BIT
- 树状数组 BIT
- ZOJ2492 ping pong(树状数组BIT)
- 树状数组BIT-乒乓比赛
- 树状数组 ( Binary Indexed Tree,BIT,二分索引树 )
- poj 2309(树状数组lowbit)
- BIT (树状数组) ——Poj 3067 Japan
- 树状数组 BIT
- BIT(树状数组简介)
- 树状数组 BIT
- POJ1195 Mobile phones —— 二维树状数组(二维BIT)
- 学习笔记 BIT(树状数组)
- 树状数组(BIT)
- LA 4329 Ping Pong 2008 北京区域赛 H , BIT 二叉索引树(树状数组)的应用