算法笔记
Fenwick Tree
树状数组,适合用于:
动态维护前缀和
1 | a=[1,3,5,7,9] |
不断有操作:
1 | 修改 a[3]+=10 |
Fenwick:
- 修改 O(log n)
- 查询 O(log n)
统计“前面有多少个”
1 | 3 1 4 2 |
问每个数左边有多少比它小。
从左到右:
1 | 3: |
这里需要:
- 插入一个数
- 查询小于它的数量
维护频率表(最常用)
数字范围:
1 | 1~100000 |
维护数字出现次数。
比如:
1 | cnt[5]=3 |
操作:
加入一个数字:
1 | add(x,+1) |
删除:
1 | add(x,-1) |
查询:
1 | 1~x出现多少个 |
代码理解
初始化
1 | class Fenwick: |
单点修改
1 | def add(self,i,x): |
“修改往后跳”
前缀查询
1 | def sum(self,i): |
“查询往前跳”
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Peanut🥜!
评论






