树状数组总结

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

具体区别和联系如下:
1、两者复杂度统计,但树状数组的常熟明显优于线段树,编程码量复杂度也小于线段树
2、树状数组的作用被线段树完全涵盖,凡是可以使用树状数组解决的问题,使用线段树一定可以解决,但反之未必
3、树状数组的突出特点是码量小,简洁,使用了lowbit函数迅速完成树状数组的核心操作,代码效率远高于线段树,lowbit(x)求最低位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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值