单调队列单调栈
单调队列,用来维护给定大小区间的最值。并且队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。
可以用来维护给定区间的最大(最小值)(滑动窗口)
单调栈,用来维护最近的大于/小于关系,可以维护偏向全局的大小关系。
单调队列实现
去尾操作
用来维护队列的单调性,当有新元素需要入队时,从队尾向前依次移除影响单调性的元素。操作结束后,进行入队。
删头操作
用来维护求解区间,当头部元素不在要求求解的区间里时,对头部元素进行删除。
取解操作
当进行完上面两步的操作后,那么队头元素即为该区间的极值。
队列中存的是下标。
实现形式
STL
双向队列
1 |
|
等方法删头去尾
手写
定义一个长数组
1 |
|
单调栈实现模板
1 |
|
单调队列实现模板
1 |
|
单调队列单调栈
http://jty-123.github.io/2022/03/27/单调队列单调栈/