#T1007. 双向队列练习

双向队列练习

题目描述

本题是双向队列的基本练习。deque 是双向队列(Double ended queue),双向队列可以在队头和队尾入队,同时也可以队头和队尾出队。

本题主要是熟悉以下几个操作:deque::push_back、deque::push_front、deque::operator[]、deque::pop_back、deque::pop_front、deque::size、deque::front、deque::back、deque::erase。

我们将操作定义如下:

  1. push_back 表示将在双向队列队尾推入一个数据,该操作后面跟随一个数据 xx,表示将 xx 推入到队尾,并输出当前队列的元素个数。
  2. push_front 表示将在双向队列队首推入一个数据,该操作后面跟随一个数据 xx,表示将 xx 推入到队首,并输出当前队列的元素个数。
  3. operator[] 表示获得指定位置的数据,该操作后面跟随一个数据 ii,表示输出队列第 ii 位置数据,注意位置描述从 11 开始。如果该位置没有数据,输出 Invalid,否则输出对应的数据。
  4. pop_back 表示在双向队列队尾删除元素;如果队列为空,输出 Empty。如果队列不为空,删除元素,不做输出。
  5. pop_front 表示在双向队列队首删除元素;如果队列为空,输出 Empty。如果队列不为空,删除元素,不做输出。
  6. size 表示输出双向队列的数据个数。
  7. front 表示输出双向队列的队首元素。如果队列为空,输出 Empty。如果队列不为空,输出队首元素。
  8. back 表示输出双向队列的队尾元素。如果队列为空,输出 Empty。如果队列不为空,输出队尾元素。
  9. erase 表示删除指定位置的数据,该操作后面跟随一个数据 ii,表示删除队列第 ii 位置数据,注意位置描述从 11 开始。如果该位置没有数据,输出 Invalid,否则删除对应的数据,并输出删除后队列元素个数。

输入

第一行为一个整数 NN,表示有多少个操作。1≤N≤5×1051 \le N \le 5 \times 10^5。

第二行到第 N+1N+1 行,每行一个操作。具体操作描述参考题目描述。保证操作的元素 xx 绝对值不会超过 10910^9。

输出

若干行。针对每个操作输出对应结果,每个操作的结果为一行。

如果最后队列不为空,请先从队尾开始,输出队列内所有数据,数据之间用空格隔开。

再从队首开始,输出队内的所有数据,数据之间用空格隔开。

15
pop_back
pop_front
push_back 10
erase 4
operator[] 3
size
back
front
push_front 2
back
front
push_front 1
push_back 15
operator[] 3
erase 2
Empty
Empty
1
Invalid
Invalid
1
10
10
2
10
2
3
4
10
3
15 10 1
1 10 15