树状数组
树状数组是一个查询和修改复杂度都为log(n)的数据结构。
主要用于数组的单点修改&&区间求和.
另外一个拥有类似功能的是线段树
🔺树状数组(Binary Indexed Tree) ------解决动态前缀和问题的数据结构
1、对于询问操作(复杂度为logN)
查询前缀和
(1)首先了解管辖区域:设节点编号为x,那么这个节点管辖的区间为2^k,(其中k为二进制末尾0的个数)个元素;
什么意思呢;
例:1)设我们一共有n个元素:a1,a2,a3,.........an,设管辖数组为d[ ] ;
则 d[6] = a5 + a6; 这是为什么呢;
看6的二进制形式为110 末尾有一个零 ,则管辖的区间为2^1 = 2个元素
2)再看d[8] = a1+a2+....+a8; 共8个元素
因为8的二进制为1000 ,末尾有三个零,则管辖的区间为2^3 = 8 个元素;
以下面这幅图为例
(2)了解如何查询前缀和:
例:假设我们要查13这个位置的前缀和:
那么怎么知道为多少呢。</