c /c++ 树状数组 入门

树状数组是一种高效的数据结构,适用于区间求和与单点修改。相较于线段树,虽然其适用场景较小,但在效率上更高。本文介绍了树状数组的基本概念、特点以及lowbit函数、getsum和update函数的工作原理,帮助读者理解并掌握树状数组的使用。
摘要由CSDN通过智能技术生成

  树状数组是十分的优雅的结构,用于解决区间求和,单点修改,树状数组和线段树很相似 ,线段树的使用范围更广,树状数组虽然可用的范围比线段树小但是它的效率比线段树高 

 下面就是树状数组的基本图形,首先要说明的是树状数组是个一维的数组 ,树状数组的下标是从1开始的 而不是从0开始的,我们只是利用了它的下标值的特点,来进行区间的求和,单点修改。 

  1 红色标注的是现在 树状数组的下标

  2   每个红色标注的上方的方格内代表着树状数组能表示原来的数组( 就是要求和,修改单点的数组 )

比如 红色下标 2 上方的 (1,2) 表示了他代表的是原来数组从 a[1] 一直到a[2]的和 (假设原来的数组为 a[8])

再比如 红色下标3 上方的 (3) , 就表示他代表的是原来数组 a[3]  (只有一个就不用再说求和了。。。)

看下面这个表格  ,要注意的是 树状数组巧妙地利用了 二进制数的特点 。

  这个图和上边的 图是相互对应的 ,观察到一下的特点

    1 . 节点下标和第四列的 最后一个元素是一样的 (就是树状数组的一个节点 所表示的范围的最后一个元素)。

    2. 节点对应的元素个数是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值