线段树乱搞大法

线段树乱搞大法

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

线段树合并

线段树分裂

线段树分治

线段树分治&cdq分治&整体二分

线段树二分

EX

1第k大

全局第k大->区间第k大(不带修)->区间第k大(带修)

权值线段树->主席树->树套树

2线段树&离线

GSS2离线,然后历史版本最小值

3线段树维护奇怪信息

CF1209G2以最小值为断点,维护各区间众数数量和

posted @ 2024-02-23 22:21  zhy_learn  阅读(18)  评论(0编辑  收藏  举报