线段树

线段树

Posted by Lerko on September 9, 2020

引入

现在我们要求一个数组进行两个操作

  1. 任意L到R的和
  2. 任意更新某个数

20200909111440

首先我们想到可以用前缀和,新建一个数组,保存每个位置到第一位的和

20200909111727

但是算法效率变化了

20200909111816

还有优化空间吗

线段树

线段树可以做到时间复杂度查找更新都是 log n

20200909111851

下面是一个例子

20200909112350

如果我们要找到 2 - 5的和

20200909112507

直接获取[3-5]的和再找到2的值相加即可

构建线段树

20200909112800

给这个树来个二向箔之后我们怎么寻找对应节点的数据? 下面有个公式

left = 2 * Node + 1 right = 2 * Node + 2

20200909114052