思路超级奇妙
珂朵莉树是对值相同,或者值连续的一些区间进行维护,每次操作之后区间的值改变,就需要进行split操作。
这题我们维护值连续的区间,要翻转了就先把两边的端点split一下,打个标记,然后暴力翻转。
而神奇的是,我们每次split最多只会增加两个区间,而每次进行修改复杂度刚好和总区间数有关!
所以我们得到珂朵莉树的复杂度是 O(Q2)
然后这题的操作又刚刚好满足结合律,而满足结合律的玩意我们当然可以用分治解决
所以我们需要一个时间复杂度只和操作数有关的算法——那不就是上面说的珂朵莉树嘛!
于是我们直接对操作分个块就完事了,总复杂度O((T2+N)×M/T),显然取T=n1/2的时候答案最优秀
当然,因为珂朵莉树在随机数据下有良好的常数,而这题出题人显然不可能想到去卡珂朵莉树,所以常数甚至仅仅只比大多数平衡树写法多了一倍。如果加个区间合并优化的话甚至可以做到和平衡树差不多的时间。
AC记录
(题解满了,先发这里)