重见树状数组

本文介绍了树状数组这一数据结构,它支持快速的单点修改和区间查询操作。通过lowbit函数确定节点更新方式,update函数用于修改指定位置的值,query函数则用于获取指定区间的前缀和。树状数组在解决区间问题时具有高效性能,是算法设计中的重要工具。
摘要由CSDN通过智能技术生成

树状数组是一种支持高效前缀查询的数据结构,基本构造如下:
在这里插入图片描述
每个节点存在一个数组里,对应一个固定的编号,并且有固定的区间长度,节点长度与lowbit有关。

以下为树状数组基础应用:单点修改+高效前缀和查询。

基础建树(和单点修改是同一个函数):

const int maxn=1e5+7;

int tr[maxn];//树状数组

int n;
int lowbit(int x){
    return x&(-x);
}
void update(int x,int d){
    while(x<=n){
        tr[x]+=d;
        x+=lowbit(x);
    }
}

区间查询:

int query(int d){
    int res=0;
    while(d){
        res+=tr[d];
        d-=lowbit(d);
    }
    return res;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KaaaterinaX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值