双端队列:
双端队列是指一个可以在队首/队尾插入或删除元素的队列 具体地,双端队列支持的操作有 4 个:
• 在队首插入一个元素
• 在队尾插入一个元素
• 在队首删除一个元素
• 在队尾删除一个元素
数组模拟双端队列的方式与普通队列相同
C++ 中使用STL构造一个queue的语句为: deque <T> q
更多用法可以翻阅文档: http://cplusplus.com/reference/deque/deque/?kw= deque
接下来给大家看一道双端队列的题目:
题目描述
对于一个队列Q,你需要实现以下几个操作
-
0 d x
,当d为0时,将x放入队首,当d为1时将x放入队尾 -
1 idx
,输出下标为idx的元素(下标从0开始) -
2 d
,当d为0时,删除队首元素,当d为1时,删除队尾元素
输入格式
第一行输入一个正整数n
接下来n行给出n个操作
保证所有指令都合法
输出格式
对于每个1 idx
操作输出一行
输入样例
11
0 0 1
0 0 2
0 1 3
1 0
1 1
1 2
2 0
2 1
0 0 4
1 0
1 1
输出样例
2
1
3
4
1
输出规模
对于全部的数据1≤n≤4×10^5,−10^9≤x≤10^9
AC代码:
#include <bits/stdc++.h>
using namespace std;
deque<int>q;
signed main()
{ int n;cin >> n;while(n--){int op;cin >> op;if(!op){int d,x;cin >> d >> x;if(!d){q.push_front(x);}else{q.push_back(x);}}else if(op==1){int idx;cin >> idx;cout<<q[idx]<<endl;}else if(op==2){int d;cin >> d;if(!d){q.pop_front();}else{q.pop_back();}}}return 0;
}
优先队列:
构造一个类型为Node的优先队列:
priority_queue<Node>q
另外注意:
1.优先队列用到结构体时,必须重载运算符,用比较函数是会CE的!
2.优先队列默认是倒序的!所以重载运算符里面的运算符都要反一下!