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