CF1886C Decreasing String 题解
-
p.s. 本题提到的所有
的 均表示 字符串的下标,而不是第 个字符串。因为我懒不想改了 -
每次遇到这种题都想不到最好的解决方法,
我是不是应该把所有比赛的 C 都做一遍啊 -
容易想到
的判断方法,枚举每个位置,找到满足 最左边的位置然后删掉。如果没有删最后一个 -
我们考虑能不能不要每次都扫一遍,而是看一下两次扫描有什么联系。
-
我们发现如果每次删除后不重新标号,那每次选择的
是递增的,因为不递增一定不优,这个很显然。 -
我们在扫描到
时,所有可以删去的 ,都满足:-
未被删去 -
-
-
而且我们可以发现一个性质:如果
而 不能被删除,则说明 中间隔着一个 ,则 一定会在 处删除。 -
因此我们可以使用单调栈维护每一时刻扫描到
时扫过的这些数中 的状态,每次删去一个数后让 即可 -
最终复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?