树状数组


树状数组原理

31e23bc7b41ec145edb45cee8b55855.png

1、lowbit(x):返回x的最后一位1

2、add(x,v):在x位置加上v,并将后面相关联的位置也加上v

3、query(x):询问x的前缀和

时间复杂度 $O(logn)$

树状数组模板

const int N = 100005;
int a[N],tree[N];
int n,m;

int lowbit(int x)
{
    return x & (-x);
}
void update(int pos,int v)
{
    for(int i=pos; i0; pos-=lowbit(pos)) ans += tree[pos];
    return ans;
}
int query(int a,int b)
{
    return query(b) - query(a-1);
}

例题:1264. 动态求连续区间和


文章作者: 葛济维
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 葛济维 !
评论
  目录