
树状数组
树状数组

树
状
数
组
的
运
用
树
状
数
组
的
运
用
首先我们得知道一个问题 , 那就是线
段树得作用并不只是用来存储线段
的 , 也可以存储点的值等等 .
对于静态的线段树 , 空间上需要的数
组有 : 当前结点的数据值 , 左儿子编
号 , 右儿子编号 . 至少这么三个数组 .
而在时间上虽然是 NlogN 的复杂度 ,
但是系数很大 .
实现起来的时候编程复杂度大 , 空间
复杂度大 , 时间效率也不是很理想 .

树
状
数
组
的
运
用
树
状
数
组
的
运
用
那么是否有更好的解决方法呢 ?
有 !
那就是树状数组 !

树
状
数
组
的
运
用
树
状
数
组
的
运
用
先看一个例题 :
数列操作 :
给定一个初始值都为 0 的序列 ,
动态地修改一些位置上的数字 ,
加上一个数 , 减去一个数 , 或者
乘上一个数 , 然后动态地提出问
题 , 问题的形式是求出一段数字
的和 .

树
状
数
组
的
运
用
树
状
数
组
的
运
用
如果直接做的话 , 修改的复杂
度是 O(1), 询问的复杂度是 O
(N),M 次询问的复杂度是 M*N.
M,N 的范围可以有 100000 以上