树状数组总结

树状数组基础
参考博文:https://bestsort.cn/2019/04/26/195/
大赞!
树状数组是一个查询和修改复杂度都为logn的数据结构,主要用于数组的单点修改&&区间求和,另外一个具有类似功能的是线段树

具体区别和联系如下:
1、两者复杂度统计,但树状数组的常熟明显优于线段树,编程码量复杂度也小于线段树
2、树状数组的作用被线段树完全涵盖,凡是可以使用树状数组解决的问题,使用线段树一定可以解决,但反之未必
3、树状数组的突出特点是码量小,简洁,使用了lowbit函数迅速完成树状数组的核心操作,代码效率远高于线段树,lowbit(x)求最低位1的位置
树状数组总结_第1张图片
lowbit函数

int lowbit(x){return x&(-x);}

单点更新

void update(int x,int y,int n){
    for(int i=x;i<=n;i+=lowbit(i))    //x为更新的位置,y为更新后的数,n为数组最大值
        c[i] += y;
}

区间查询


int getsum(int x){
    int ans = 0;
    for(int i=x;i;i-=lowbit(i))
        ans += c[i];
    return ans;
}

你可能感兴趣的:(树状数组总结)