U635560 【模板】双端队列
题目背景
洛谷原[【模板】双端队列 1](https://www.luogu.com.cn/problem/B3656) 把手写双端队列和 STL 中的 `deque q;` 都卡掉了(~~1e6 个 deque~~)。
于是,我为了完成我的[模板题大合集](https://www.luogu.com.cn/article/46nagszn/edit),便诞生了此题。
题目描述
请你实现一个双端队列,支持如下操作:
- `push_back(x)`:在双端队列中从尾部插入一个元素 $x$;
- `pop_back()`:在双端队列中从尾部弹出一个元素。
- `push_front(x)`:在双端队列中从头部插入一个元素 $x$;
- `pop_front()`:在双端队列中从头部弹出一个元素。
- `size()`:查询双端队列的元素个数;
- `front()`:查询双端队列的队首元素;
- `back()`:查询双端队列的队尾元素;
对于 `pop_back`,`pop_front`,`front` 和 `back` 操作,若当前双端队列为空则不进行,直接跳过该次操作。
输入格式
输入的第一行是一个正整数 $n$,表示操作次数。
接下来 $n$ 行,每行先是一个字符串,保证为 `push_back` 或者 `pop_back` 或者 `push_front` 或者 `pop_front` 或者 `size` 或者 `front` 或者 `back` 之一。接下来可能会有一个正整数,表示 $x$。
输出格式
对于每个 `size` 或者 `front` 或者 `back` 操作,输出一行表示答案。
说明/提示
**【数据范围】**
**本题捆绑子任务。**
| 子任务 | $n \leq$ | 分值 |
| :-----------: | :-----------: | :-----------: |
| $1$ | $10$ | $10$ |
| $2$ | $2000$ | $20$ |
| $3$ | $10^5$ | $30$ |
| $4$ | $10^6$ | $40$ |
对于所有数据,$1 \leq n \leq 10^6$,$1 \leq x \leq 10^9$。
**【说明】**
:::info[数据生成器]
```cpp
#include
using namespace std;
const int N=1e6;
string mp[8]={"",
"push_back",
"pop_back",
"push_front",
"pop_front",
"size",
"front",
"back"
};
inline int rd(int x){
return (1ull*rand()*rand()*rand()*rand()+rand()*rand()+rand())%x+1;
}
int main(){
srand((unsigned)time(0));
freopen("test010.in","w",stdout);
int n=rd(N);
cout