树状数组(Binary Indexed Tree),又叫做Fenwick Tree,它能够高效地获取数组中连续N个数的和。
传统数组(共n个元素)的元素修改和连续元素求和的复杂度分别为O(1)和O(N)。树状数组通过将线性结构转换成 逻辑上的树状结构(线性结构只能逐个扫描元素,而树状结构可以实现跳跃式扫描),使得修改和求和复杂度均为O(lgN),大大提高了整体效率。
传统数组(共n个元素)的元素修改和连续元素求和的复杂度分别为O(1)和O(N)。树状数组通过将线性结构转换成 逻辑上的树状结构(线性结构只能逐个扫描元素,而树状结构可以实现跳跃式扫描),使得修改和求和复杂度均为O(lgN),大大提高了整体效率。
对于给定的数组A,我们创建一个等大的数组BIT[N],并在逻辑上把BIT[N]构造成数组A对应的求和树。
我们这样构造BIT数组,对于下标为2的幂减1的(因为下标从0开始),用BIT[2k-1]来存储数组A[0...2k-1]的前