Type: Default 2000ms 256MiB

deque模板题

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目描述

现有一个双端队列(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)。

竞赛3班7.26日习题课

Not Attended
Status
Done
Rule
IOI
Problem
13
Start at
2025-7-26 14:00
End at
2025-7-26 20:00
Duration
6 hour(s)
Host
Partic.
9