[Ynoi Hard Round 2025] 《十字神名的预言者》宏伟(色彩)
先说WBLT
一种平衡树,是Leafy tree,支持分裂合并,同时如果可持久化,可以快速复制k份(1log),好像常数小,不难写,也许是平衡树新优选
关键是合并操作,类似AVL,我们设置平衡指数\(\alpha\),定义子树的siz是叶子节点个数,要求min比sum\(\geq\alpha\)可以简写为\(max \leq 3min\)
考虑合并,假定x比y大,如果link(x,y)合法,那link,否则,如果ls(x)和merge(rs(x),y)link合法,link,否则merge(merge(ls(x),ls(rs(x))),merge(rs(rs(x)),y))
分裂就记录左右两边的子树,递归即可
可持久化是容易的
对于上面这个题,考虑一个2log做法,从后向前扫,然后,尝试记录每个位置上次sub,mod都生效是哪里,最多log下,使用区间复制+可持久化即可
现在是log*log的,考虑仿照GBBT,尝试改成log+log,具体的,当完成一次sub+mod的复制时,它和父亲的连边,设成"红色"的然后考虑,查询的时候,直接找那个值,每次经过红边,相当于进入新的递归结构,即做了一次sub+mod
还要注意,要保证红子树是完整的,所以merge是不能分裂ta,split是,要新建节点,保护内部子树
跑得飞快,3sec以内,复杂度1log
浙公网安备 33010602011771号