P11191 「KDOI-10」超级演出 根号分治 / 二维数点
首先考虑对于操作序列的每个点求出一个最大时刻 \(lst_i\) 表示至少需要操作 \([lst_i, i]\) 的操作序列中的点,不难发现 \(lst_i\) 相当于所有后继结点中取 \(\max\)。
有了这个 \(lst\),我们可以对于每一个区间进行二维数点,这个具体可以离线树状树组维护。
但是我们发现序列中可能会有重复元素,这一部分暴力做可能退化到 \(O(n^2)\),考虑对度数进行根号分治,对于度数小的进行收集,度数大的进行扩展。
不过总体而言这个题还是人力可及也,可能要仔细思考一些细节。
update:由于可能有重复的点,所以我们类似 HH 的项链一样,弹入一个弹掉一个,然后发现并不需要差分,因为 \([1, l - 1]\) 的 \(lst_i\) 肯定小于 \(l\)。然后根号分治的时候稍微注意一下更新就好,如果有多个元素要取目前最大的就行。

浙公网安备 33010602011771号