队列

前言

先进先出,没啥好说的

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
简单单调队列

posted @ 2024-11-21 22:15  流氓兔LMT  阅读(1)  评论(0编辑  收藏  举报