喵喵喵
也是来写单调队列了喵
举个例子
小鸽子喜欢玩很多游戏,但是有的时候
小鸽子不得不退而求其次(并非其次)
那么怎么让小鸽子知道他在每段时刻上线能玩到的最佳游戏呢
正片开始
我们发现窗口的滑动仅仅只改变了一位
如果是求和的话那就简单了,无论是前缀和还是其他乱七八糟的做法都可以
但是我们这里主要讲一下动态维护的方式:去掉前一个过期元素,加入新元素
好了,那么求极值怎么动态维护呢
观察一下
欸,问题来了
我们发现答案对应下标是只增不降的
为什么呢
如果有 i < j , a_i < a_j 时 除非 a_i 过期,否则不可能选 a_j (不代表一定会选 a_i ),a_i > a_j 时 就不会选 a_i (不代表一定会选 a_j )
那么这个区间就可以变成这样
我去这不就是双指针吗
考虑什么时候队列可以往前
就是我比你小,还比你强
![]()
(在我之前加入队列的一定比我下标小)
![]()
把过期的扔掉
那么此时,队首元素就是集“未过期”和“赛高赛强”于一体
直接取出即答案
神秘花絮







