P7261-PATULJCI-题解

原题链接:Link

一种无需回滚的莫队写法

首先看到题就可以想到莫队。最朴素的写法就是维护莫队区间中每一种颜色的出现次数,同时维护莫队区间中的最大值。然后你会发现:莫队区间缩小的时候没法维护。

考试的时候就卡在这里了,然后写了一个线段树维护的带 \(\log\) 莫队,不出意外地 \(T\) 了。考完才知道是随机化二分,教练说回滚莫队也可以做,不过本蒟蒻不会,只好仔细端详了数据范围,然后发现 \(O(mc)\) 的方法是可以过的,所以很容易想到暴力的莫队——用一个数组维护区间中每一种颜色的出现次数,但是不同步维护最大值,每次移动到目标区间之后再暴力扫一下每一种颜色,求出最大值。

理论上1e8比较悬,但是常数小,跑得也挺快。啥优化都没加,一个点300ms 。试了一下吸氧,总时间跑到了700ms。

AC代码