Problem N: 双向队列练习 I
[Creator : ]
Description
本题是双向队列的基本练习。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 表示将在双向队列队尾推入一个数据,该操作后面跟随一个数据 $x$,表示将 $x$ 推入到队尾,并输出当前队列的元素个数。
2、push_front 表示将在双向队列队首推入一个数据,该操作后面跟随一个数据 $x$,表示将 $x$ 推入到队首,并输出当前队列的元素个数。
3、operator[] 表示获得指定位置的数据,该操作后面跟随一个数据 $i$,表示输出队列第 $i$ 位置数据,注意位置描述从 $1$ 开始。如果该位置没有数据,输出 Invalid,否则输出对应的数据。
4、pop_back 表示在双向队列队尾删除元素;如果队列为空,输出 Empty。如果队列不为空,删除元素,不做输出。
5、pop_front 表示在双向队列队首删除元素;如果队列为空,输出 Empty。如果队列不为空,删除元素,不做输出。
6、size 表示输出双向队列的数据个数。
7、front 表示输出双向队列的队首元素。如果队列为空,输出 Empty。如果队列不为空,输出队首元素。
8、back 表示输出双向队列的队尾元素。如果队列为空,输出 Empty。如果队列不为空,输出队尾元素。
9、erase 表示删除指定位置的数据,该操作后面跟随一个数据 $i$,表示删除队列第 $i$ 位置数据,注意位置描述从 $1$ 开始。如果该位置没有数据,输出 Invalid,否则删除对应的数据,并输出删除后队列元素个数。
本题主要是熟悉以下几个操作: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 表示将在双向队列队尾推入一个数据,该操作后面跟随一个数据 $x$,表示将 $x$ 推入到队尾,并输出当前队列的元素个数。
2、push_front 表示将在双向队列队首推入一个数据,该操作后面跟随一个数据 $x$,表示将 $x$ 推入到队首,并输出当前队列的元素个数。
3、operator[] 表示获得指定位置的数据,该操作后面跟随一个数据 $i$,表示输出队列第 $i$ 位置数据,注意位置描述从 $1$ 开始。如果该位置没有数据,输出 Invalid,否则输出对应的数据。
4、pop_back 表示在双向队列队尾删除元素;如果队列为空,输出 Empty。如果队列不为空,删除元素,不做输出。
5、pop_front 表示在双向队列队首删除元素;如果队列为空,输出 Empty。如果队列不为空,删除元素,不做输出。
6、size 表示输出双向队列的数据个数。
7、front 表示输出双向队列的队首元素。如果队列为空,输出 Empty。如果队列不为空,输出队首元素。
8、back 表示输出双向队列的队尾元素。如果队列为空,输出 Empty。如果队列不为空,输出队尾元素。
9、erase 表示删除指定位置的数据,该操作后面跟随一个数据 $i$,表示删除队列第 $i$ 位置数据,注意位置描述从 $1$ 开始。如果该位置没有数据,输出 Invalid,否则删除对应的数据,并输出删除后队列元素个数。
Input
第一行为一个整数 $N$,表示有多少个操作。$1 \leq N \leq 5\times 10^5$。
第二行到第 $N+1$ 行,每行一个操作。具体操作描述参考题目描述。保证操作的元素 $x$ 绝对值不会超过 $10^9$。
第二行到第 $N+1$ 行,每行一个操作。具体操作描述参考题目描述。保证操作的元素 $x$ 绝对值不会超过 $10^9$。
Output
若干行。针对每个操作输出对应结果,每个操作的结果为一行。
如果最后队列不为空,请先从队尾开始,输出队列内所有数据,数据之间用空格隔开。
再从队首开始,输出队内的所有数据,数据之间用空格隔开。
如果最后队列不为空,请先从队尾开始,输出队列内所有数据,数据之间用空格隔开。
再从队首开始,输出队内的所有数据,数据之间用空格隔开。
Sample 1 Input
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
Sample 1 Output
Empty
Empty
1
Invalid
Invalid
1
10
10
2
10
2
3
4
10
3
15 10 1
1 10 15