1513 : 琪露诺的排卡教室

时间限制Time Limit 1 Sec 内存限制Memory Limit 128 MB 提交次数Submitted 0 Times 通过次数Solved 0 Times 标准评测Standard Judge

题目描述Description

题目背景

人间之里新开了一家机厅,最近因为乌蒙机子太火,门口总是围满了人。

这天,琪露诺兴冲冲地跑来,打算挑战一下据说“很厉害”的阴游。然而她刚挤到机子旁边,就被告知:

“小孩,要先排卡,按号码来,不然不能上机。”

琪露诺当场愣住了。

“排卡?那是什么?是新的对战规则吗?”

她看着旁边那一串号码、不断变化的位置,还有时不时被叫去打歌的人,完全搞不清现在到底是谁在前、谁还能玩、谁已经不玩了。

这一切对琪露诺来说都太复杂了。

于是,她只好看向你,认真地问:
“你这么聪明,一定知道现在队伍到底是什么情况吧?帮我看看,我什么时候能玩到嘛!”

题目概况

由于乌蒙最多只能让2个人上机游玩,而机厅常常会有大B队(就是很多人) 所以会有一个用来排队的系统,该系统可视为3个部件组成:

  • 公卡堆:一个抽象的号码池。每次从中取出当前最小的号码分配给新玩家。
  • 排卡区:一个队列,存放已取出的卡片,代表排队顺序。队首是最先被轮询到的卡片。
  • 机厅内部:记录当前有哪些玩家在厅内等待(上机游玩本身不改变等待状态,除非玩家主动离开)。

玩家与卡片的关系

每位玩家拥有一张号码唯一的卡片。卡片在排卡区中的位置代表其轮询次序,而玩家本人可能处于三种状态之一:

  • 在机厅等待(可被游戏叫号选中);
  • 暂时离开(卡仍在队列中,但叫号时会跳过);
  • 已注销(卡已从队列移除并归还公卡堆,玩家不再参与排队)。

每位玩家来到机厅时,会从公卡堆中取出当前编号最小的卡,然后将这张卡放入排卡区的末尾。 这张卡代表该玩家在排队,同时该玩家进入机厅等待。

初始状态

由于 10 点机厅刚开门。所以排卡区为空,而公卡堆中包含编号为 1,2,3,…,998244353 的卡。 随后有 n 名玩家“堵门”,她们会立刻涌入机厅并排卡(等效于连续执行 n操作1)。 随后处理 q 次操作。

操作定义

操作类型 参数 描述
1 新玩家到来。从公卡堆取出最小号码的卡片,将该卡放入排卡区末尾,并标记此玩家“在机厅等待”。
2 p 卡号为 p 的玩家暂时离开机厅。将其状态改为“离开”,但卡片仍留在排卡区原位置
3 p 卡号为 p 的玩家回到机厅。将其状态改回“在机厅等待”。
4 p 卡号为 p 的玩家永久离开。将其状态设为“已注销”,同时从排卡区队列中删除该卡片,并将卡号 p 归还公卡堆(可供后续新玩家使用)。
5 p 查询卡号为 p 的卡片当前在排卡区中的位置序号(从队首开始计为第1位)。
6 x 开始一局游戏,需要选出 x 名玩家上机( x=12 )。执行轮询过程直到选中恰好 x 名“在机厅等待”的玩家:
 ① 将排卡区队首卡片移动到队尾;
 ② 若该卡片对应的玩家当前状态为“在机厅等待”,则该玩家被选中上机(状态不变)。
输出这 x 名玩家对应的卡号

保证所有操作合法(例如离开/回来时玩家状态符合逻辑,叫号时机厅内等待人数足够,操作5时保证查询卡号的卡片在排卡区等等)。

输入格式Input

第一行两个非负整数 n, q,表示初始排卡人数与后续操作次数。
接下来 q 行,每行一个操作,格式如上表。
op ≠ 1,则紧跟一个正整数参数。

输出格式Output

对于每个操作5,输出一行一个整数表示卡片位置。
对于每个操作6,输出一行,包含 x 个整数,表示被选中玩家的卡号(按选中顺序排列)。

样例Sample

提示Hint

样例解释

操作 操作后队列 输出
初始 [1,2,3,4,5,6]
2 2 [1,\underline{2},3,4,5,6]
2 3 [1,\underline{2},\underline{3},4,5,6]
2 4 [1,\underline{2},\underline{3},\underline{4},5,6]
6 2 [6,1,\underline{2},\underline{3},\underline{4},5] 1 5
4 1 [6,\underline{2},\underline{3},\underline{4},5]
1 [6,\underline{2},\underline{3},\underline{4},5,1]
3 3 [6,\underline{2},3,\underline{4},5,1]
6 2 [\underline{4},5,1,6,\underline{2},3] 6 3
5 1 [\underline{4},5,1,6,\underline{2},3] 3
6 2 [6,\underline{2},3,\underline{4},5,1] 5 1

说明:带下划线的数字(如 \underline{2})表示该玩家暂时离开,卡仍在队列中但叫号时跳过。操作 6 选中玩家后会改变队列顺序,但不会删除卡片。操作 4 永久离开会从队列中移除卡片。

数据规模

0 \le n, q \le 2\times 10^5

出题Author

akl9

来源Source

深圳技术大学第六届程序设计竞赛