单侧递归线段树
yangzichen1203 · · 算法·理论
基本信息
在信息无法快速合并时,单侧递归线段树可以维护一类单点修改,区间查询问题。
如单点修改,区间询问前缀单调栈内元素个数。
需要合并左侧的信息和右侧被左侧限制的信息,通过线段树右侧向下递归的方式
单点修改和区间查询的时间复杂度都是
1
https://www.luogu.com.cn/problem/P4198
:::success[Solution] 单点修改,全局前缀单调栈元素个数,直接套模版即可。
时间复杂度
2
https://www.luogu.com.cn/problem/AT_jsc2019_final_h
:::success[Solution]
维护每个位置
一个区间
固定右端点
询问
题目转换成单点修改,求区间前缀
时间复杂度
3
https://qoj.ac/problem/971
:::success[Solution] 离线询问,对二叉树位置进行扫描线。
对于操作
注意到询问
所以对于操作
离散化原值作为序列下标,时间作为值,维护单侧递归线段树即可。
时间复杂度
4
https://qoj.ac/contest/1515/problem/8229
:::success[Solution] 离线询问,对栈位置进行扫描线。
将栈的操作序列抽象成合法括号序列,消除匹配的括号,最后一定为左侧
可以发现
对于操作
对于操作
对于操作
时间复杂度
5
https://www.luogu.com.cn/problem/CF1340F
:::success[Solution] 对任意一个区间,如果区间内部没有产生括号类型冲突,那么不断消去匹配括号后,剩余串一定形如若干未匹配右括号加上若干未匹配左括号。
我们记录哈希方便比较,并判断非法状态,所以将状态记为
用线段树维护信息,考虑如何合并
若
否则将多余的部分合并到新的
时间复杂度
6
https://qoj.ac/contest/1049/problem/5098
:::success[Solution] 与 https://www.luogu.com.cn/problem/AT_jsc2019_final_h 基本相同,不过因为信息无法差分,需要再存一下合并前被限制的一侧的贡献。
时间复杂度
7
https://www.luogu.com.cn/problem/P6781
:::success[Solution]
同
时间复杂度