Uoj228 基础数据结构练习题
最开始好像是在那个区间加区间 的题里看到有人提到这个题,就来写下。
离联合省选还有 26 天,发了一上午呆。
题意 区间加 区间开根 区间和 ,1s 256mb
遇到区间开根这种显然无法整体打 Tag 的东西,一般考虑势能分析。
如果你做过这个题没有区间加的弱化版的话,考虑一个数开根 次就会变成 , 如果没有区间加的话,就维护一下区间里有没非 的数暴力开根就行了。
有这个区间加的话,简单分析一下可以发现:对于两个差很大的数,复合若干次 后差会变得很小,进一步地,对于两个数 , 给式子两边平方一下可以简单地发现。也就是说差大于 的两个数会在若干次复合后变成差为 的,再变成 ,其中有一种特殊情况就算 操作后差仍然为 。
也就是说对于两个同一个段里不同的数。即使有区间加,我们最多给他们各自开根 次后差就会变成 。
然后这个问题就变的清晰起来了,考虑分块:
如果一个块不满足所有数相同或开根后极差仍然为 ,就暴力开根,否则打标记处理和的变化。
考察每个块的极差作为势能, 表示状态 时的势能,令 ,我们每暴力进行一次根号级别的暴力开根,新状态的势能至少减少 ,即 ,每次区间加或区间开根显然只会给边上的 块带来 所以时间复杂度是均摊 的,可以摊成 但是更慢了,反正都不卡常随便过。
在 gjh 的提醒下,( 容易发现,因为区间操作的性质,上面那个分块的势能分析拿到 SegmentTreeBeats 上也是成立的,所以可以做到 还更好写 [小丑]。并不是那么
)
本文已经结束了。本文作者:ღꦿ࿐(DeepSea),转载请注明原文链接:https://www.cnblogs.com/Dreamerkk/p/17183211.html,谢谢你的阅读或转载!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步