树状数组Fenwick tree
用下标的最低有效位组织可复用的前缀聚合区间。
- 核心约束
- 每个单元保存由 lowbit 决定的连续区间摘要。
- 适用问题
- 频繁点更新与前缀统计、计数和排名。
- 边界与取舍
- 通用区间运算能力通常不如线段树,需满足运算性质。
常见操作#
n 为数组长度;以加法和为例,整数宽度固定。
| 操作 | 时间复杂度 | 条件与说明 |
|---|---|---|
| 初始化为零 | 建立 n 个聚合槽位。 | |
| 单点增量更新 | 沿 lowbit 对应的祖先区间累计增量。 | |
| 前缀和 / 区间和 | 区间和用两个前缀之差;依赖可逆运算。 | |
| 从数组逐项加入 | 调用 n 次单点更新;专门的线性构建可以 ,不是所有 API 都提供。 | |
| 读取 / 覆盖一个位置 | 通过前缀差取得当前值,再按差量更新;保留原数组可让读取为 。 |
时间与空间#
- 时间复杂度
- 更新 / 前缀查询
- 存储空间
不能直接把任意非可逆区间运算当作前缀差处理。
基础原理参考资料
AtCoder Library · Fenwick Tree初始化、增量更新、区间和以及类型限制。
Fenwick 1994 · Cumulative frequency tables二进制索引树的原始论文。