#1520. deque模板题

deque模板题

题目描述

现有一个双端队列(Deque)容器,支持以下操作:在队首插入元素、在队尾插入元素、在队首删除元素、在队尾删除元素、查询队首元素、查询队尾元素和查询队列大小。你需要实现这个双端队列,并处理可能的边界情况。具体规则如下:

  1. 队首插入操作:在双端队列的头部插入一个元素。
  2. 队尾插入操作:在双端队列的尾部插入一个元素。
  3. 队首删除操作:删除双端队列的头部元素。若队列为空,则操作无效。
  4. 队尾删除操作:删除双端队列的尾部元素。若队列为空,则操作无效。
  5. 队首查询操作:获取双端队列的头部元素。若队列为空,则返回特殊值。
  6. 队尾查询操作:获取双端队列的尾部元素。若队列为空,则返回特殊值。
  7. 大小查询操作:返回双端队列的元素数量。若为空则不输出。

操作完成后,需输出最终双端队列的所有元素(按从队首到队尾的顺序)。

输入格式

  • 第一行输入一个整数q1 ≤ q ≤ 1000000),表示操作的总次数。
  • 接下来q行,每行表示一次操作,格式如下:
    • 队首插入操作1 x(在队首插入元素x)。
    • 队尾插入操作2 x(在队尾插入元素x)。
    • 队首删除操作3(删除队首元素)。
    • 队尾删除操作4(删除队尾元素)。
    • 队首查询操作5(查询队首元素)。
    • 队尾查询操作6(查询队尾元素)。
    • 大小查询操作7(查询队列大小)。

输出格式

  • 对于每次队首查询操作(操作5),输出一行:
    • 若队列非空,输出队首元素;
    • 若队列为空,输出-1
  • 对于每次队尾查询操作(操作6),输出一行:
    • 若队列非空,输出队尾元素;
    • 若队列为空,输出-1
  • 对于每次大小查询操作(操作7),输出一行整数,表示队列的元素数量。
  • 所有操作完成后,输出一行:
    • 按从队首到队尾的顺序输出所有元素,用空格分隔。若队列为空,输出空行。

样例 1 输入

6
1 10
2 20
1 30
5
6
7

样例 1 输出

30
20
3
30 10 20

样例说明

  1. 队首插入操作:在队首插入10,队列变为[10]
  2. 队尾插入操作:在队尾插入20,队列变为[10, 20]
  3. 队首插入操作:在队首插入30,队列变为[30, 10, 20]
  4. 队首查询操作:队首元素为30,输出30。
  5. 队尾查询操作:队尾元素为20,输出20。
  6. 大小查询操作:队列有3个元素,输出3。
  7. 最终输出:按队首到队尾的顺序输出所有元素30 10 20

测试点约束

  • 操作次数 q ≤ 1000000
  • 元素值的取值范围为int(-2^31 ~ 2^31-1)。
  • 若操作不合法 则当前操作忽略

提示

  • 双端操作:双端队列支持在头部和尾部高效插入和删除元素。
  • 边界检查:所有查询操作需检查队列是否为空。
  • 高效实现:插入和删除操作的时间复杂度应为O(1)。