7.3.1 蓝桥杯基础数据结构之树状数组基础
引言
树状数组(Binary Indexed Tree,简称BIT)是一种用于高效处理数组前缀和、区间求和及单点更新问题的数据结构。在诸如蓝桥杯这样的信息学竞赛中,树状数组因其简洁高效而被广泛应用。
树状数组概述
树状数组是一种基于树结构的数组,可以在 O(log n) 的时间复杂度内完成前缀和的查询和数组元素的修改操作。
应用场景
- 动态计算数列的前缀和
- 数列单点更新后的前缀和查询
- 区间和查询
工作原理
树状数组的核心思想是将数组分解成多个部分,每个部分对应原数组中的一个范围。通过这种分解,可以快速计算和修改前缀和。
索引计算
树状数组的每个节点包含了一定范围内的元素和。一个节点的索引计算公式是:idx += idx & (-idx)
,用于向上查询;而更新时使用的计算公式是:idx -= idx & (-idx)
,用于向下更新。