树状数组和线段树

树状数组和线段树
GuoTianyu树状数组
解决什么问题?
- 给某个位置上的数,加上一个数。(单点修改)
- 求某一个前缀和。(区间查询)
时间复杂度
- O(long n)
步骤及实现
给定一个数组{1,5,7,11,4,3,2,6,11,21,15,17,14,13,20,35}。下面将通过树状数组的方式进行查询与修改。
把普通数组进行存储。
存储的位置,从数组的下标”1”开始存,下标”0”不存储元素。
把普通数组转换成树状数组(重点)。
看不懂没关系,先给大家讲解一下,单点修改和区间查询是如何方便的:
- 树状数组的单点修改,对整体数组修改影响
较小
。
“前缀和”的单点修改对整体数组修改的影响
假如我们对一个数组的下标3的元素进行加3操作,那么它对应的前缀和数组,下标3之后的所有元素都要进行加3操作,这样操作的时间开销是极大的。
如果使用树状数组,对下标3的元素进行加3操作,树状数组的开销就小得多。
仅对下标为“3”,”4”,”8 “,“16”的元素进行加3操作。
- 下面是最终转换的树状数组:
- 树状数组的单点修改,对整体数组修改影响