11.20 CW 模拟赛 T3.货物分组
算法#
考虑
令
关于转移, 我们有
其中
这样转移是
这里是一个
将
复杂度
对于
方程转化成
考虑令
这是可以维护的吗?
考虑线段树维护
对于每一次更新
我们可以在单调栈中找到每一段区间最大值小于
容易发现, 这就是单调栈所维护的基本信息, 本质上是找当前节点左侧第一个比自己大的元素, 用一个单调递减栈即可, 特别的, 对于这两个单调栈, 维护的都是前缀最值
于是我们只需要线段树维护区间最值 and 区间加法
复杂度
代码#
第一次写单调栈维护
代码大致分为几个板块:
- 维护区间最值, 有区间加法功能的线段树
- 单调递减栈, 维护区间最大值小于
的左端点, 单调递增栈, 维护区间最小值大于 的左端点
注意单调栈事实上维护的是几段, 每一段线段树上更新的值都不同, 不能一次弄完
这几天状态真的不好, 但这题也是真的搞懂了, 懒得再去打代码和调了
总结#
费用提前计算是一个巧妙的
注意
对于神秘转移式子, 考虑多来几种数据结构维护
单调栈/队列 是常见的数据结构维护
神秘维护, 诗人握持
vivo 50
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】