五彩斑斓的世界

[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 比较大时可以通过将最小的改变,通过势能保证复杂度正确,然后再通过离线分块卡空间。

posted @ 2025-03-09 00:21  positive_deviation  阅读(25)  评论(0)    收藏  举报