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)容器,支持以下操作:在队首插入元素、在队尾插入元素、在队首删除元素、在队尾删除元素、查询队首元素、查询队尾元素和查询队列大小。你需要实现这个双端队列,并处理可能的边界情况。具体规则如下:
- 队首插入操作:在双端队列的头部插入一个元素。
- 队尾插入操作:在双端队列的尾部插入一个元素。
- 队首删除操作:删除双端队列的头部元素。若队列为空,则操作无效。
- 队尾删除操作:删除双端队列的尾部元素。若队列为空,则操作无效。
- 队首查询操作:获取双端队列的头部元素。若队列为空,则返回特殊值。
- 队尾查询操作:获取双端队列的尾部元素。若队列为空,则返回特殊值。
- 大小查询操作:返回双端队列的元素数量。若为空则不输出。
操作完成后,需输出最终双端队列的所有元素(按从队首到队尾的顺序)。
输入格式
- 第一行输入一个整数
q
(1 ≤ 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
样例说明
- 队首插入操作:在队首插入10,队列变为
[10]
。 - 队尾插入操作:在队尾插入20,队列变为
[10, 20]
。 - 队首插入操作:在队首插入30,队列变为
[30, 10, 20]
。 - 队首查询操作:队首元素为30,输出30。
- 队尾查询操作:队尾元素为20,输出20。
- 大小查询操作:队列有3个元素,输出3。
- 最终输出:按队首到队尾的顺序输出所有元素
30 10 20
。
测试点约束
- 操作次数
q ≤ 1000000
。 - 元素值的取值范围为
int
(-2^31 ~ 2^31-1)。 - 若操作不合法 则当前操作忽略
提示
- 双端操作:双端队列支持在头部和尾部高效插入和删除元素。
- 边界检查:所有查询操作需检查队列是否为空。
- 高效实现:插入和删除操作的时间复杂度应为O(1)。
7.25造数据
- Status
- Done
- Rule
- IOI
- Problem
- 13
- Start at
- 2025-7-25 18:00
- End at
- 2025-7-25 21:00
- Duration
- 3 hour(s)
- Host
- Partic.
- 9