Skip to content

Fenwick 树

Fenwick tree · Binary indexed tree

用二进制最低位分解维护动态前缀聚合,支持单点更新与前缀查询的对数时间数据结构。

形式陈述

Fenwick 树以数组 t[i] 保存长度为 lowbit(i)=i&(i) 的后缀块聚合。 前缀查询反复执行 iilowbit(i);单点增量更新反复执行 ii+lowbit(i)。两者均访问 O(logn) 个节点,空间 O(n)。 若操作构成交换群,可由两个前缀查询得到任意区间值。

直觉

二进制最低位决定索引所代表的最大对齐块;查询向左拆块,更新向右通知所有包含该点的块。

例子与边界

它可维护动态频数并通过二进制提升查找第 k 个前缀位置。一般非交换操作、任意区间赋值或复杂懒更新并不适合普通 Fenwick 树。

推论与应用

用于动态前缀和、逆序对、在线频数、坐标压缩后的统计和顺序统计。

参考资料