数据结构条目-单调队列
名称:单调队列
用途:
用于解决滑动窗口类问题,时间复杂度为O(n)。
描述:
单调队列是一个双向队列(既可以在队首操作也可以在队尾操作),同时保证队列内的元素单调递增或递减。
单调队列有4种操作:
- 往单调队列中新增元素。新元素应该增加在队尾处。当新增元素破坏了单调性时,通过在队尾处删除元素来保证单调性,最后再加入新元素;有时候因为题干的限制,单调队列的长度是有上限的,当长度突破上限,此时应该在队首处删除元素来保证长度限制。
- 查询队首。
- 删除队首。
- 删除队尾。
实现:
通过STL的deque可以实现。
题目日志:
题目链接:洛谷P1886
P1886代码实现:
#include <stdio.h>
#include <deque>
using namespace std;
const int N = 3e6+100;
deque<int> q;
int a[N], b[N];
int main()
{
int n, k; scanf("%d %d&#