SIMD12B.连续窗口

传统题 时间 2000 ms 内存 256 MiB 8 尝试 45 已通过 8 标签

连续窗口

题目描述

一条服务台共有从左到右编号为 11nn 的窗口,初始时全部空闲。系统按顺序处理 qq 条指令。每个团队有唯一编号,且需要占用连续的 kk 个窗口。

团队到达后进入等待队列尾部。只要等待队首能够被安排,就必须立即安排:系统总是为它选择最靠左的一段长度为 kk 的连续空闲窗口。若队首暂时无法安排,即使后面的团队人数更少也不能跳过队首。一个已经入座的团队离开,或等待中的团队取消后,系统都要立刻重复上述安排过程,直到队首无法安排或队列为空。

指令有四种:

  • A id k:编号为 idid 的团队到达,需要 kk 个连续窗口。
  • L id:编号为 idid 的团队离开。只有已入座的团队会释放窗口。
  • C id:编号为 idid 的团队取消。只有仍在等待的团队会被取消。
  • Q:询问当前入座团队数、等待团队数和等待队首编号;若没有等待团队,队首编号输出 0

请依次输出所有询问的答案。

输入格式

第一行两个整数 n,qn,q1n1001 \le n \le 1001q2000001 \le q \le 200000)。

接下来 qq 行,每行一条指令。所有到达团队的编号互不相同,满足 1idq1 \le id \le q;人数满足 1kn1 \le k \le n。离开、取消指令只会引用已经到达过的团队。

输出格式

对每条 Q 指令输出一行三个整数:入座团队数、等待团队数和等待队首编号。

样例

样例 1

输入:

6 10
A 1 4
A 2 3
Q
L 1
Q
A 3 4
C 3
Q
L 2
Q

输出:

1 1 2
1 0 0
1 0 0
0 0 0

在线编程 IDE

建议全屏模式获得最佳体验