队列
前言
先进先出,没啥好说的
STL queue
#include <bits/stdc++.h>
using namespace std;
int main()
{
queue<int> q;
q.push(12); // 12进入队列
q.push(13); // 13进入队列
q.push(123); // 123进入队列
cout << q.front() << endl; // 返回队首值
q.pop(); // 删除队首值
cout << q.back() << endl; // 返回队尾值
cout << q.size() << endl; // 返回元素个数
if (!q.empty()) // 检查是否为空
{
cout << "Y" << endl;
}
return 0;
}
/*输出
12
123
2
Y*/
STL deque
#include <bits/stdc++.h>
using namespace std;
int main()
{
deque<int> dq;
dq.push_back(123); // 对尾加入123
dq.push_front(321); // 对头加入321
dq.push_front(111); // 对头加入111
cout << dq[1] << endl; // 返回坐标为1的值
cout << dq.front() << endl; // 返回队头的值
cout << dq.back() << endl; // 返回队尾的值
return 0;
}
/*
输出
321
111
123*/
单调队列
三个重要元素:
- 对头
- 队尾
- 窗口(区间)
两个重要操作:
- 删头:如果对头脱离窗口,则元素无用,删去
- 去尾:如果新元素入队,原队尾破坏了单调性删去
for (int i = 1; i <= n; i++) // 滑动窗口 输出最小值
{
while (q.size() && a[q.back()] > a[i])
q.pop_back(); // 去尾
q.push_back(i);
if (i >= k)
{
while (q.size() && q.front() <= i - k)
q.pop_front(); // 删头
}
}
题目
P1540
简单单调队列