线段树乱搞大法
Part1
普通线段树
简单的区间或单点问题,支持四则运算(可以扩展成可合并的信息,如hash)
权值线段树
每个节点维护值域为\([l,r]\)的个数,可以维护全局第k大(线段树二分),
zkw线段树
...
Part2
懒标记
区间操作,历史版本最值/和
标记永久化
区间操作,单点修改
要求:操作顺序不影响答案(所以乘除法,历史版本最值不能用)
Part3
主席树(可持久化线段树)
可持久化普通线段树:查询历史版本
可持久化权值线段树:区间第k大(不带修)
树套树
线段树套线段树
要求外层线段树支持标记永久化,内层可以支持懒标记
log^2
树状数组套线段树
要求答案可加减,线段树可合并
树状数组先把区间找到,然后线段树的时候每个节点就对着logn个,合并起来算答案(所以一般是权值线段树)
线段树套主席树
...
李超线段树
节点维护区间中点的最高线段,然后对于每个被完全覆盖的区间(最多logn个),分类讨论:左右儿子只用下传一个
log^2
吉司机线段树
支持区间取min/max,区间和sum
以区间\(min(x,a_i)\)为例子,记录区间最大值mx,次大值se,最大值个数cnt,懒标记
如果x>mx,不用进区间
如果x>se,只用修改最大值,sum+=(x-mx),mx=x,懒标记
否则下传两个儿子
如果要打区间加,就要两个懒标记,要注意先下传加标记(下传时要给取min懒标记,mx,se也++),再下传取min懒标记
兔队线段树
猫树
...
Part4
线段树合并
线段树分裂
线段树分治
线段树二分
EX
1第k大
全局第k大->区间第k大(不带修)->区间第k大(带修)
权值线段树->主席树->树套树
2线段树&离线
GSS2离线,然后历史版本最小值
3线段树维护奇怪信息
CF1209G2以最小值为断点,维护各区间众数数量和
标签:大法,树套,标记,线段,min,乱搞,区间,mx From: https://www.cnblogs.com/zhy114514/p/18028189