HDU POJ 树状数组 (Binary Indexed Tree) 教程 大牛讲解,超简单~~

本文介绍了树状数组(Binary Indexed Tree)的概念,通过实例展示了如何利用树状数组快速求解前缀和,并解释了lowbit操作在其中的作用。此外,还详细说明了树状数组的更新过程,包括如何构建和更新树状数组。
摘要由CSDN通过智能技术生成

引言

       树状数组,在存储空间上是一个数组,但是在逻辑上,把它作为一个树来处理。我们先来大致感受下,暂时不需要深入理解。

                                    

图1 

如图,红色部分的数组c[ ],在存储的时候,是一个一维数组,图中之所以变现出树形结构,是经过了“某些操作”,我将在后文中解释。


“树状数组” 与 “和” 的关系

假设我们已经把树状数组构造好了(后面会讲如何构造,先感受下如何求和的),来看看如何求和:


符号:数列-----a[1...N]       树状数组-----tree[1...N]        前i项的和-----getSum(i) (这是一个函数)


例子: 

getSum(1) =tree[1]

getSum(2) =tree[2]

到这里,似乎能看出规律大笑!!tree[i]中存的就是前i项的和生气!!这是错的难过。继续往下看:

getSum(3) =tree[3] + tree[2]

getSum(4) =tree[4]

getSum(5) =tree[5] + tree[4]

到这里,不知道大家找到规律没有,反正我是没找到害羞。。。。


我们不妨换一种方式写,用二进制试试!!(注意:以下式子中,数字都是以二进制形式书写

getSum(1) = tree[1]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值