树状数组(Binary Indexed Tree(B.I.T), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值。
修改和求和的时间复杂度:logn
设节点编号为x,那么这个节点管辖的区间为2^k(其中k为x二进制末尾0的个数)个元素。
例如:
C1(0001) = A1 k=0,管辖区域1
C2(0010) = A1 + A2 k=1,管辖区域2
C3(0011) = A3 k=0,管辖区域1
C4(0100) = A1 + A2 + A3 + A4 k=1,管辖区域2
C5(0101) = A5