一,什么是线段树?
-
线段树是怎样的树形结构?
线段树是一种二叉搜索树,而二叉搜索树,首先满足二叉树,即每个结点最多有两颗子树,并且是一颗搜索树,我们要知道,线段树的每个结点都存储了一个区间,也可以理解成一个线段,而搜索,就是在这些线段上进行搜索操作得到你想要的答案。
-
线段树能够解决什么样的问题?
线段树的适用范围很广,可以在线维护修改以及查询区间上的最值,求和。对于线段树来说,每次更新以及查询的时间复杂度为O(logN)。
-
线段树和其他RMQ算法的区别
常用的解决RMQ问题有ST算法,二者预处理时间都是O(NlogN)
(详见ST算法解决BMQ问题详解),而且ST算法的单次查询操作是O(1),看起来比线段树好多了,但二者的区别在于线段树支持在线更新值,而ST算法不支持在线操作。
1. 静态的区间询问:ST表
2. 动态的区间询问:线段树/树状数组
静态指的是,数字 不会发生 改变
动态指的是,在 查询过程中,数字可能会发生一定程度的 修改
二,线段树的基本操作
建树
思路
首先,我们得先明白几件事情:
每个结点存什么
结点下标是什么
如何建树
下面我以一个简单的求一段区间的最大值来描述上面的三个概念。
对于a[1~6] = {1,8,6,4,3,5}来说,线段树如上所示,红色代表每个结点存储的区间,

本文深入解析线段树数据结构,涵盖基本概念、适用场景、与其他算法对比,以及建树、区间查询、单点更新、区间更新等核心操作。通过实例代码,帮助读者掌握线段树的运用。

14万+

被折叠的 条评论
为什么被折叠?



