与前缀和类似,树状数组最基础的应用也是求前缀和,不过它可与动态维护一个前缀和,就是说当元素改变时,它的前缀和也会相应的改变。
- BIT的应用:
区间和
区间加/单点查询
二维动态树状数组
关于BIT的一些前期基础知识可以参考这篇博客。
这里贴一个板子:
求i二进制最低位的权重
int lowbit(int i)
{
return i&(-i);
}
维护前缀和数组
void add(int x,int num)//x节点加num
{
while(x <= Max)
{
c[x] += num;
x += lowbit(x);
}
return ;
}
求前x项和:
int sum(int x)
{
int sum = 0;
while(x)
{
sum += c[x];
x -= lowbit(x);
}
return sum;
}