基础线段树
发布时间
阅读量:
阅读量
一、单点修改,区间查询
(一)查询某区间内最大值:acwing最大数
对于静态问题,可以采用RMQ(倍增)方法进行实现。
在处理单点修改时,尽量避免使用懒标记,因为其操作较为复杂。
线段树中的每个节点均对应一个结构体,具体存储的内容需依据题目要求而定:
- 根据问题需求确定存储内容,例如在进行区间查询时,需要存储该区间的左右端点位置及其对应的属性;
- 若当前属性无法通过两个子区间的属性计算得出,则需要引入辅助信息以支持相关运算。
构建线段树的过程通常采用递归方式,例如节点i的两个子节点分别为2i和2i+1,只有叶子节点会被实际赋值:
- 建树过程从i=1开始;
- 当l=r时即为叶子节点,此时进行赋值;否则继续递归;
- 维护操作一般情况下是必要的,但若构建的树为空则可省略。
维护操作分为两种类型:一种是从下往上更新父节点信息(pushup),另一种是从上往下传递信息到子节点(pushdown):
- 在从下往上的维护过程中,通过pushup方式更新父节点数据。查找过程中自上而下定位到目标叶子节点并完成修改后,在回溯过程中同步更新父节点的信息;
- 在从上往下的维护中,则通过pushdown方式将父节点的修改传递至子节点。
对于单点修改操作,同样采用递归方式进行处理:从根节点1出发定位目标叶
全部评论 (0)
还没有任何评论哟~
