#64. 双结构调度器
双结构调度器
双结构调度器
题目背景
在某在线判题系统(OJ)中,请求会以不同优先规则进入系统。为了处理这些请求,系统维护了两个数据结构:
- 一个 栈 S(后进先出)
- 一个 队列 Q(先进先出)
系统支持多种操作,请你模拟整个过程,并输出查询结果。
初始时,栈 S 和队列 Q 均为空。
系统会给出 n 条操作,每条操作为以下之一:
| 操作 | 含义 |
|---|---|
PUSH x |
将整数 x 压入栈 S |
ENQUEUE x |
将整数 x 加入队列 Q |
MOVE_SQ |
若栈 S 非空,则将栈顶元素弹出并加入队列 Q |
MOVE_QS |
若队列 Q 非空,则将队首元素取出并压入栈 S |
POP_S |
若栈 S 非空,弹出栈顶元素 |
POP_Q |
若队列 Q 非空,弹出队首元素 |
QUERY |
输出当前「栈顶元素 + 队首元素」的和;若某一结构为空,则将该部分视为 0 |
输入格式
第一行一个整数 ,表示操作数。
接下来 行,每行为以下字符串之一:
PUSH x:将整数 x 压入栈 SENQUEUE x:将整数 x 加入队列 QMOVE_SQ:若栈 S 非空,则将栈顶元素弹出并加入队列 QMOVE_QS:若队列 Q 非空,则将队首元素取出并压入栈 SPOP_S:若栈 S 非空,弹出栈顶元素POP_Q:若队列 Q 非空,弹出队首元素QUERY:输出当前「栈顶元素 + 队首元素」的和;若某一结构为空,则将该部分视为 0
其中 为整数,满足
输出格式
对于每条 QUERY 操作,输出一行结果。
12
PUSH 5
PUSH 3
ENQUEUE 10
QUERY
MOVE_SQ
QUERY
MOVE_QS
QUERY
POP_S
QUERY
POP_Q
QUERY
13
15
13
8
5
样例解释
操作过程如下:
| 操作 | 栈 S | 队列 Q |
|---|---|---|
| PUSH 5 | $ | |
| PUSH 3 | ||
| ENQUEUE 10 | ||
| QUERY | ||
| MOVE_SQ | ||
| QUERY | ||
| MOVE_QS | ||
| QUERY | ||
| POP_S | ||
| QUERY | ||
| POP_Q | ||
| QUERY |
数据范围
对于 的数据:,所有操作中不包含 MOVE_SQ 和 MOVE_QS
对于 的数据:
对于 的数据:
- ;
- 为整数,满足 ;
- 保证不会对空栈或空队列执行弹出操作;