省选集训 day 2 平衡树

link

A

注意到每条运动轨迹是已知的,我们的目标就是找到可以选择的最大权值(定义为路径上的特殊点个数)的运动轨迹并支持删除这些点。

找轨迹:利用斜率为 ±1 的直线 x+y,xy 至少有一个不变的性质寻找

对于边界,可以使用常见手段:延拓一倍平面,也就是变成 2n 行,这样就只会走模运算意义下的直线

注意特殊点公用位置的情况。

同时我们由于从每个特殊点转折后有两个方向,不妨加一个第二维度 0/1 描述方向。

因此我们就可以表示出每条链及其方向了。

使用权值线段树维护每一行的开头的轨迹的最大值并记录编号。

然后直接删掉整条链,这部分由于方向确定,所以一个点至多在两条链里,因此总删除复杂度 O(M)

然后主要的问题在于如何维护每条链的权值,支持动态删点,并且还有可能由于链头被挡住导致只能从链中间取的情况。

因此我们还需要考虑到每一行的归属轨迹。

暴力地,我们直接对涉及到的链只修改被更改的部分。考虑到其运行速度相当快,我们来思考下暴力做法的复杂度。

可以想到,如果一条链产生相当大的时间开销,那么必然是从后面每次都往前删,删很多次,并且这条链不是最长的链,这告诉我们单次取出一条贡献 w 的链,其复杂度上界是 O(min(m,w2)),那么现在一个更强化的问题是:给定序列 a1an,ai=m 然后复杂度不超过 min(m,ai2)

考虑到在 n 固定时,a 贪心取 m 及更低的值, 那么必然是越散越大,也就是 m·m 的上界。

一种可能的情况是当前链挡住后面某一条很长很长的链,导致其被更新,我们考虑考察这条链的更新次数,其本质还是等差数列级(如果要挡住,每次的链长度不会相同),也就是根号级别。

如有其他hack方法欢迎提出。

B

考虑置换环,一次交换相当于分裂环/合并环。

那么对于这个操作,我们必然是希望不断分裂环让其变为全自环的。

然后怎么操作呢,例如这样一棵树 a:312,p:011

就无解了

这告诉我们这个环必然得是一个从根到底的一条链上的节点,但是不要求顺序,这也可以解释链的情况必然有解。

考虑如果没有顺序,一个自然的想法是让深度次大与深度最大互换,这样就分裂为两个置换环了。

但是有了按照顺序操作的限制,我们应该怎么办?

你要保证每个环仍然足够鲜活,也就是除了深度最大的点都还能操作

也就是需要有意识地隔离深度最大点

也就是操作一个点后让它变为深度最大点

建立环 iai

例如现在操作 x,反着跳,直到遇到第一个 y 使得 depy>depx,这时候交换这两个点的 a 值,就可以完成操作了。

也就是说,需要一个数据结构,维护环分裂,某个方向首次 > 的值,

注意到我们可以以最大 dep 作为序列终点维护整个序列,我们以反方向,也就是 aii 为正方向,那么相当于是若操作 x,往右找到首个 t 满足 depx<dept,然后将这个序列变为:

x 方向: [x+1,t1][x]

t 方向:[1,x1][t,end]

使用 fhq_treap 维护即可。

C

基础题目,线段树合并/启发式合并/可并堆板题。

D

可以发现可以单独维护分子分母,也就是有:

1ak+1ak+1=ak+1akak+1+1

因此会有假设后面若干步得到答案是 xy,那么有:

xy=1ak+xy=yy·ak+x

可以写作矩阵:

[011ak]×[xy]

因此答案可以表达为关于序列 a 相关的矩阵乘积,注意是倒着由 k 乘到 0 的,并且最开始 x=0,y=1

考虑操作 W,其实显然有:

[011ak]×[1101]=[011ak+1]

注意这里我们需要右乘,其道理是如果将E也表示为这样的形式,那么就不需要考虑 a 的末尾具体是啥了

考虑操作 E

其后一种情况可以写为:

[011ak]×[1101]×[0111]×[0111]=[011ak]×[0112]

同时前一种情况可以描述为

[011ak1+1]×[011ak]=[011ak1]×[1101]×[0111]=[011ak1]×[1211]

同时我们发现对于上面的那种情况,带入 ak=1,有:

[0111]×[0112]=[1211]

得到了同样的结果

那么这告诉我们,其实有:

{W:[1101]E:[0112]

剩下的维护属于平衡树基础操作:维护正反的左右向的矩阵积一共四个即可。

posted @   spdarkle  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2022-12-24 根号分治入门
点击右上角即可分享
微信分享提示