【2022 省选训练赛 Contest 18 A】B(Splay)
B
题目链接:2022 省选训练赛 Contest 18 A
题目大意
给你 n 个点,每个点第 i 天的代价是 b[i]+(i-1)a[i]。
然后要你在前 m 天每天选一个点,然后最小化总代价。
思路
首先考虑怎么 DP,观察到如果你选好的一个点集,你可以很容易的得到最优的选的方案。
即按 从大到小排,然后每次依次选,这样增长的量就会最小。
我们可以按 从大到小排序来 DP,设 为搞定前 个,选了 个的最小费用。
然后每次下一个选或者不选转移,显然超时。
考虑维护每个 数组,亦或者说是看一个新的数会产生什么。
然后有一些性质。
首先就是 的点集必定是 点集的子集,你可以用反证法来得到。
(反正意思就是你不选这个点集的肯定不如 的点集加上一个数更优)
然后接着就是加入一个数,它能修改的范围一定是一段后缀。
这个也是可以通过反证法得到,根据前面的性质就有了。
那我们就可以通过二分出贡献的后缀。
然后你要支持区间插入,区间加,区间二分,可以用平衡树来实现。
(过程就是维护每个点当前代表的选的个数,以及新选这个需要的费用)
(那你贡献就是一个区间加值,就是后面的一段都要加上你这个 ,因为你每往后一个位置,就多了 的费用)
代码
__EOF__

本文作者:あおいSakura
本文链接:https://www.cnblogs.com/Sakura-TJH/p/16056911.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Sakura-TJH/p/16056911.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
标签:
平衡树
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具