五彩斑斓的世界
[Ynoi2018] 五彩斑斓的世界
你有一个长为 n 的序列 a,有 m 次操作
把区间 [l,r] 中大于 x 的数减去 x。
查询区间 [l,r] 中 x 的出现次数。
n<=1e6 m <= 1e5 x,a <=1e5 ,空间64MB,时限 7s.
解题思路:
考虑分块。
你在每个块中维护个并查集,然后动态去合并相同的数,但当 x 较小,maxn 较大时,时间复杂度会炸,因为你将块中许多数都枚举了一遍,但不同的数的数量只会减 x,所以可以将前 x 个合并到后面,再区间减,这样通过势能分析,可以在O(x) 的时间复杂度内将不同的数的个数剪掉 x。
然后这样空间开不下,所以可以通过离线分块去做。
这题他的 trick 就在当 maxn 比较大时可以通过将最小的改变,通过势能保证复杂度正确,然后再通过离线分块卡空间。

浙公网安备 33010602011771号