填坑行动13-单调栈和单调队列

单调栈

栈相信大家都学过,但是单调栈或许就有人没有学过了。
单调栈并不是指栈里边是有序的,而是指出战顺序是有序的。
单调栈入栈的伪代码如下(这里的单调栈是递增的):

while(当前元素>栈顶元素&&栈不为空) 栈顶元素出栈
当前元素入栈

一句话,一个选手比你强,还比你小,你就被踢出去了,真残忍,当然,只要你足够强,你就永远不会被踢出去。
作用:寻找一个数组 f 中,比 f 大或小并且下标比当前数字小或大的一个数字。

单调队列

单调队列的作用和单调栈一样,但是单调队列维护的是一个长度一定的区间的最值。
伪代码如下(这里维护最大值):

while(队首的下标<=当前点的下标-区间大小&&队列不为空) 队首出队
while(队尾<当前点&&队列不为空) 队尾出队
当前元素进队

总之,一个选手比你小,还比你强,你就无法战胜它了,这也是单调队列一个令人心酸的梗。(感觉要被单调队列了啊QAQ)
当然,就算你再强,你也终有一天会被踢出去。
感觉OIers都处于同一个单调队列之中,而我快要被单调队列了

作用

单调队列的作用还是比较广的,简单的来讲,维护区间最值,往往用于DP的优化,例如多重背包可以采用单调队列优化,这样原来的 Θ(nmk) 就可以优化成 Θ(nm) 了。

posted @   jiangtaizhe001  阅读(40)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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工具
点击右上角即可分享
微信分享提示