填坑行动13-单调栈和单调队列
单调栈
栈相信大家都学过,但是单调栈或许就有人没有学过了。
单调栈并不是指栈里边是有序的,而是指出战顺序是有序的。
单调栈入栈的伪代码如下(这里的单调栈是递增的):
while(当前元素>栈顶元素&&栈不为空) 栈顶元素出栈 当前元素入栈
一句话,一个选手比你强,还比你小,你就被踢出去了,真残忍,当然,只要你足够强,你就永远不会被踢出去。
作用:寻找一个数组 中,比 大或小并且下标比当前数字小或大的一个数字。
单调队列
单调队列的作用和单调栈一样,但是单调队列维护的是一个长度一定的区间的最值。
伪代码如下(这里维护最大值):
while(队首的下标<=当前点的下标-区间大小&&队列不为空) 队首出队 while(队尾<当前点&&队列不为空) 队尾出队 当前元素进队
总之,一个选手比你小,还比你强,你就无法战胜它了,这也是单调队列一个令人心酸的梗。(感觉要被单调队列了啊QAQ)
当然,就算你再强,你也终有一天会被踢出去。
感觉OIers都处于同一个单调队列之中,而我快要被单调队列了
作用
单调队列的作用还是比较广的,简单的来讲,维护区间最值,往往用于DP的优化,例如多重背包可以采用单调队列优化,这样原来的 就可以优化成 了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具