Skip to content

Latest commit

 

History

History
20 lines (12 loc) · 988 Bytes

fenwick.md

File metadata and controls

20 lines (12 loc) · 988 Bytes

树状数组

代码

树状数组本质上就是用一个元素管理原数组中的多个元素,以快速求出某范围内元素的某些性质。

维护一个数组 fenwick,下标从1开始。该数组的第 i 位元素代表原数组某几个连续元素的和。具体是哪几位元素呢:

i=6,二进制表示为 0b110,最低的 1 在倒数第二位,则其管理 101, 110。若 i=0b1100,则管理 1001, 1010, 1011, 1100

可以利用其求数组每个元素左侧有多少个小于它的元素。树状数组代表值域,从左到右遍历数组,每遇到一个数则将以该数为下标的树状数组的元素的值加一。假设当前遍历到了7这个元素:

0 1 2 3 4 5 6 7 8 9
0 0 0 1 1 0 0 1 0 0

如上图,那么元素7的左边有两个小于它的元素。

另外树状数组不一定要存储元素的和,也可以存储其他信息,例如最大值,最小值等,具体看题目要求。