树状数组Fenwick tree

用下标的最低有效位组织可复用的前缀聚合区间。

核心约束
每个单元保存由 lowbit 决定的连续区间摘要。
适用问题
频繁点更新与前缀统计、计数和排名。
边界与取舍
通用区间运算能力通常不如线段树,需满足运算性质。

常见操作#

n 为数组长度;以加法和为例,整数宽度固定。

操作时间复杂度条件与说明
初始化为零O(n)O(n)建立 n 个聚合槽位。
单点增量更新O(log⁡n)O(\log n)沿 lowbit 对应的祖先区间累计增量。
前缀和 / 区间和O(log⁡n)O(\log n)区间和用两个前缀之差;依赖可逆运算。
从数组逐项加入O(nlog⁡n)O(n \log n)调用 n 次单点更新;专门的线性构建可以 O(n)O(n),不是所有 API 都提供。
读取 / 覆盖一个位置O(log⁡n)O(\log n)通过前缀差取得当前值,再按差量更新;保留原数组可让读取为 O(1)O(1)。

时间与空间#

时间复杂度
更新 / 前缀查询 O(log⁡n)O(\log n)
存储空间
O(n)O(n)

不能直接把任意非可逆区间运算当作前缀差处理。

基础原理参考资料

AtCoder Library · Fenwick Tree初始化、增量更新、区间和以及类型限制。

Fenwick 1994 · Cumulative frequency tables二进制索引树的原始论文。

13 个概念