【做题记录】P6749 Yoshino
-
- 算法:树套树、线段树、珂朵莉树
题目:
一个长度为 的序列,第 项为 ,对数列进行 次操作。
-
:把数列下标在 区间内的数赋值为了一个从 开始公差为 的等差数列。
-
查询整个数列中的逆序对个数。
。
题解:
考虑逆序对本质。
每次赋值等差序列是不会出现逆序对的。
设当前修改的是 ,那么逆序对个数
考虑用树套树去维护。
在线段树的值域缩小的同时,修改区间也随之缩小。
考虑对每个值点建一个树状数组,然后开个桶统计。
然后随便做一下前缀和、区间维护。
对于动态逆序对,其实可以考虑颜色段均摊的思想。
冷静一下,珂朵莉树的 assign 操作,那么将区间变成点,然后暴力维护。
而每次操作除了最初的区间,每次赋值最多只会增加 和其左、右分裂部分。所以最多 个区间。
注意每个区间只操作一次,所以均摊就是 ,其中 是单次修改复杂度。
还记得当时开的值域桶,那么用一个树状数组套就可以了。
至于 ,朴素地分类计算即可。
实现时注意珂朵莉部分的操作,开三个 set 来统计当前增加区间、分裂的左、右区间。
总的时间复杂度 。
本文作者:trsins
本文链接:https://www.cnblogs.com/trsins/p/15814800.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步