首先把初始的 也看成一个操作。
考虑所有满足 的操作,找到 最大的操作中 最小的操作 ,对所有操作进行如下修改:
- 如果 ,那么把 删去。
- 否则,将 的前缀替换成 ,称其为将 染色。
这样所有 的 都相同,于是我们可以把第一位删去,进入新的子问题。容易证明原问题中首位最大的所有方案都可以对应到新问题上的一个方案。
直接暴力模拟可以得到一个 的做法,考虑优化。注意到如果某个操作的首位是之前被染过色的,那么它一定不会成为上文中的操作 ,因为将它染色的操作一定比它更优。所以首位被染过色的操作一定不会成为答案,自然地,其首位的具体值也不重要,我们只需要维护一个操作被染色部分的右端点 。考虑 什么时候变化,注意到若 的时候,操作 一定被染色,所以每次将 和 取 即可。
https://uoj.ac/submission/679817
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】