首页 > 其他分享 >单调栈与单调队列

单调栈与单调队列

时间:2023-07-03 15:34:33浏览次数:36  
标签:队列 入队 或是 while now 单调

单调栈

数组/栈中的数满足单调性质(递增或递减),可查询 \(1 - i\) 中的最小值或是最大值。

实现:(以单调上升举例)
将数按顺序压入栈中,若新压入的数小于前一个数(不满足单调性),则弹出前一个数,继续向前比较,直至满足大于前一个数(满足单调性)时将此数入队。

代码:

while(s[now] < a[i]){ //不满足条件
    now --; //弹出
} s[++ now] = a[i]; //入栈

应用:
常用于寻找一个数右侧第一个大于或是小于它的数。或是用于优化 dp 的效率。

习题:
Patrik 音乐会的等待

单调队列

类似于单调栈,但可控制区间长度,不一定是单调栈的 \(1 - i\) ,可以是 \(j - i\) 。

实现:
在单调栈的基础上添加控制左端点的变量。

代码:

l = 1; r = 0; //初始化左右端点位置
while(l <= r && a[i] > a[s[r]]){
	r --; //弹出
}
s[++ r] = i; //入队
while(l <= r && s[l] + k <= i){ //若长度不满足限制
	l ++; //左端点右移
}

应用:
常用于查询一段区间中的最大值或是最小值。

习题:
理想的正方形
WIL

标签:队列,入队,或是,while,now,单调
From: https://www.cnblogs.com/biuld/p/17522957.html

相关文章

  • c++实现多线程消息通信队列
    #ifndef_SYNC_SIMPLEQUEUE_QUEUE_HPP_#define_SYNC_SIMPLEQUEUE_QUEUE_HPP_#include<queue>usingnamespacestd;namespaceutility{template<typenameT>classSyncSimpleQueue{public:voidput(constT&msg){std::uniqu......
  • UVA210 双端队列模拟并行程序
    #include<iostream>#include<algorithm>#include<string>#include<sstream>#include<vector>#include<queue>#include<cstring>usingnamespacestd;constintmaxn=10001;//uva210:题意模拟n个程序的并行执行,有赋值,打印,lock,unlock,......
  • 【牛客小白75】D 矩阵 【bfs+优先队列】
    题目https://ac.nowcoder.com/acm/contest/60063/D题意是说,给你一张\(n*m(n,m\leq10^3)\)大小的01地图,当前点下一步只能走到相邻的点上,如果这两个点值相同,则代价为2,否则代价为1,问从(1,1)走到(n,m)最少代价是多少思路首先很容易想到只往右下走是错的,有可能往左和往上走总代价更......
  • js 数组和链表分别实现队列
    链表实现/***1.单项链表实现队列,但要同时记录head和tail*2.要从tail入队,head出对,否则出队时,tail不好定位*2.单独记录length,不可遍历链表获取length*/classMyQueue{head=null;//头tail=null;//尾len=0;add(n){letnewNode={......
  • 单调队列
    目录单调队列例题洛谷P18862023暑假训练-单调队列单调栈单调队列单调的队列,即插入元素时保证队列是单调的。去尾、删头、窗口来维护一个单调队列例题洛谷:P2629洛谷P1886代码:constintmaxm=1e6+5,inf=0x3f3f3f3f,mod=998244353;lln,k,a[maxm];deque<ll>q;//单调队列......
  • 2023ACM暑假训练day 5-单调队列 单调栈
    目录DAY5单调队列/栈训练情况简介A题B题C题D题E题未出,题解补F题未出,题解补G题看了cf数据,得wa启发补充内容单调栈MonotoneStack单调栈矩形系列字典序最小贡献法单调队列MonotoneQueueDAY5单调队列/栈训练地址:传送门训练情况简介早上:A、B、C、D题下午:E题(未......
  • IBM WebSphere MQ8.0 安装与队列创建
    最近接触的项目中使用了IBMWebsphereMQ8.x,由于要为其编写监控插件,所以在网上找了很久的资料,发现8.x实在是太老了,很多资源和教程都没有,遂决定在此统一整理和记录一下.安装下载安装包IBM官方已不再提供下载,这里贴一下网盘的链接链接:https://pan.baidu.com/s/1f2U0XqEe0hi......
  • python 队列简单实现
    1classQueuryExcept(Exception):...23classLinkNode:4def__init__(self,value:int,next=None):5self.value:int=value6self.next:LinkNode=next78def__repr__(self)->str:9li=[se......
  • 单调栈
    目录单调栈例题单调栈单调的栈,即插入元素时保证栈内元素是有序的。例题P2422良好的感觉贪心,其实对每一个最小值,找到其的左右小于最大范围,但关键在于怎么快速找到这个范围,这里利用了单调栈详见代码:constintmaxm=1e5+5,inf=0x3f3f3f3f,mod=998244353;lln,a[maxm],sum[......
  • Kubernetes编程——client-go基础—— 工作队列(workqueue)
    工作队列(workqueue[wɜːk][kjuː])https://github.com/kubernetes/kubernetes/tree/release-1.27/staging/src/k8s.io/client-go/util/workqueue我理解意思是说:这里说的"工作队列"指的一个数据结构。用户可以按照队列所预定义的顺序向这个队列中添加和取出......