论定期重构珂朵莉树的强大(

P2572 [SCOI2010] 序列操作

金珂拉 @ 2021-08-25 21:15:48

序列操作AC记录

这玩意真的离谱……

题解里面有暴力 O(\min(N,Q)\times Q) 珂朵莉树,然后我按照我的习惯调整成了复杂度正确的O(n\sqrt n) 的定期重构链表式珂朵莉之后成功过了()

但是因为操作4处理两端多余部分和进行split操作的时候依旧搞一层静态区间最小值,所以复杂度显然不可能比线段树好,也没有珂朵莉树在随机数据下的良好特性,而且码量也大了一坨……


by w23c3c3 @ 2021-08-25 21:21:31

哪个 1e5 卡根号


by 金珂拉 @ 2021-08-25 21:24:56

@w23c3c3 当然没卡根号,但是题解里的暴力珂朵莉被卡掉了,所以我就把它优化到了严格的根号以内)


by 樱洛CHANGE @ 2021-08-25 21:49:03

您可以发一篇题解造福一下大众吗


by 樱洛CHANGE @ 2021-08-25 21:49:28

@金珂拉 还有u1s1真的不知道定期重构珂朵莉树是个啥。。。


by 金珂拉 @ 2021-08-29 17:44:42

@樱洛CHANGE 题解满了()

定期重构珂朵莉树……就是正常珂朵莉一样用一个三元组l,r,tag表示某一段区间,把set改链表,然后其他操作不变,块数多了就把珂朵莉树转换成数组之后再清空珂朵莉树,加一个(1,n,0)表示这个数组的1-n区间,然后就接着split就行了)

三元组的split和打标记录都是O1的,所以只要每次发现块的数量大于根号就直接重构就行了()


by Lacrymabre @ 2021-10-06 15:40:47

还有一点不明白的地方

我的操作是定期重构的时候扫一次全棵树,然后对连续相等的块暴力合并。

请问,这样子的复杂度重构的时候是 \sqrt n 的吗(\sqrt n 块一次合并),为什么会T呢?


by peterwuyihong @ 2021-10-12 19:05:47

我敲,还真能这么写


by 某珂学的超OIer @ 2021-10-19 20:36:22

@Raintime1231 不是对的吧,因为树中可能刚好是 1010 交错,那这样即使重构了也是 O(n)


by 某珂学的超OIer @ 2021-10-19 20:41:09

@金珂拉 奆佬,可以详细讲一下怎么对数组进行查询吗?


by 金珂拉 @ 2021-10-19 20:57:38

@某珂学的超OIer 链表里从左到右扫先确定在哪些块里,然后和和普通分块一样做


| 下一页