题解P6578 [Ynoi2019] 魔法少女网站
题目
P6578 [Ynoi2019] 魔法少女网站
第十分块。
分析
(主要介绍怎么想到要使用这些做法的,以及这些做法的一点特性)
操作分块+序列分块。
首先我们考虑一下不用修改的话应该怎么做。
我们可以把题目这样转化:假设
那么现在
我们发现
那怎么让只有
好了,现在我们的问题就是怎么来维护这个极长子区间呢?
考虑序列分块/链表,这里使用序列分块,同时还要记录修改,因为一会要撤回(至于为什么要撤回见后文)。
那么现在我们解决了不带修改的问题,带修改的呢?
我们不可能直接修改,因为这样依然会是我们每次会修改一些点
这个时候的
那么我们可以这样来考虑:我们先不修改,把需要修改的那些点先存下来,然后把剩下的一直没有修改的点按照静态做法来做。
接下来我们对于修改了的点考虑,由于我们默认的是 0 ,于是我们现在可以对于每一次询问暴力遍历所有的修改,然后暴力判断查看这个修改会不会让我们的某一个位置
那么这样的话时间复杂度直接爆炸,是
那现在就需要一个新的技巧了:操作分块。
操作分块可以让我们当前的全局修改只有
那么现在我们对操作分块,我们的修改只有
操作分块具体实现来就是刚刚说的每个询问遍历所有修改然后处理,再撤回到这个询问遍历所有修改之前的那个状态就可以了。
取块长
代码
请务必做好卡常的心理准备...
卡了一万年的常...人都傻了...
可以参考