“只收集更新中出现的z,排序去重得到z₀<…<zσ₋₁。用树状数组保存各坐标当前加入的权重和。查询阈值Z不必出现在更新坐标中:求有多少个压缩坐标≤Z,即 ,再查询这么长的前缀。”
形式陈述
设
的后缀块
本页采用一基下标,查询允许 lowbit 按能容纳下标的无符号机器字运算计算,负号取模;更新时先检查
前缀查询从
由两个前缀可恢复区间聚合。加法记号下是
直觉
二进制最低位把每个前缀唯一拆成少量对齐块。查询向左删除当前最低位,恰好取出最后一个完整块;更新向右增加最低位,恰好枚举所有把该位置包含在其后缀块中的节点。它是一棵隐式树,父子关系编码在索引位模式中。
与线段树不同,Fenwick 树没有为每个区间保存显式左右孩子。紧凑布局换来更窄的操作接口:标准版本擅长可交换的点增量与前缀聚合,不自动支持任意非交换更新或复杂区间标签。
例子与边界
长度
若要把位置
对非交换群,块聚合有固定数组顺序,而把同一
推论与应用
Fenwick 树实现动态前缀聚合、频数表和逆序对计数。若频数始终非负,前缀计数单调,还可沿二进制块定位给定累计秩,支持顺序统计;任意有正负抵消的群值不满足这项搜索前提。利用一个或两个树配合差分,可支持区间加与点查询、区间加与区间和;这些公式都依赖相应阿贝尔群与索引边界。
线段树只需幺半群即可维护有序区间聚合,并能通过更丰富节点摘要处理非交换操作;代价是更大的常数与显式树形分解。二者的
参考资料
- Peter M. Fenwick, “A New Data Structure for Cumulative Frequency Tables,” Software: Practice and Experience 24(3), 1994, pp. 327–336.
- OI-Wiki contributors, “Fenwick Tree,” 2026.