最近我发现很多人不知道单调栈是什么,单调队列是什么,比如我的队友,所以我想统一讲一下单调栈和单调队列。但是即使我知道单调栈和单调队列,由于洛谷上面没有单调栈专题,我是没有练习过单调栈的,导致我在比赛中十分生疏,失误连连,最后痛失ICPC银牌,我因为这个几天都没睡好,像是得了银川+单调栈PTSD,一听到这两个词就难受。
定义:
单调栈和单调队列与其说是一种数据结构,我更认为他们是一种算法思想。
单调栈:维护一个保持栈的单调性
单调队列:维护一个队列的单调性
作用:
两者名字相似,作用完全不同
单调栈:找向左,向右第一个比当前元素小(大)的元素。O(n)算法。
单调队列:私以为单调队列就是滑动窗口,大部分是定长的滑动窗口,也有些变长的滑动窗口,那些变长的滑动窗口其实更像是尺取的一种思想。滑动窗口,顾名思义,就是在一个数组结构中滑动的窗口,作用,维护在数组中的一个定长的窗口的最大值(最小值),这里听不懂窗口可以直接看例题。O(n)算法。
例题:
单调栈:https://www.luogu.org/problem/P2659
题目背景
GD是一个热衷于寻求美好事物的人,一天他拿到了一个美丽的序列。
题目描述
为了研究这个