QOJ.ac

QOJ

Limite de temps : 4 s Limite de mémoire : 512 MB Points totaux : 100

#12168. 餐厅

Statistiques

在一家苏联餐厅门前,有 $N$ 个人排队等待餐厅开门。这些人按到达顺序被标记为从 $1$ 到 $N$ 的自然数。菜单上只有一种选择,即“招牌菜”煎蛋。餐厅里没有厨师,客人们必须自己准备餐点。餐厅里只有一口平底锅,因此在任何时刻最多只能有一位客人准备食物。此外,餐厅里只有一把叉子和一把刀,因此在任何时刻最多只能有一位客人进食。幸运的是,餐厅里有无限多的盘子,所以准备好食物的客人可以将食物转移到盘子上,等待叉子和刀空闲。

对于每位客人,已知其准备食物所需的时间以及进食所需的时间。你的任务是确定如果客人们选择以最优顺序准备和进食,所有人吃完饭所需的最短时间。

此外,在餐厅开门之前,发生了 $K$ 个关键事件,类型如下:

  • DOLAZI a b:来了一位新客人,他准备食物需要 $a$ 分钟,进食需要 $b$ 分钟。新来的客人被标记为尚未被任何现有客人使用的最小自然数。
  • ODLAZI x:第 $x$ 个到达餐厅的客人离开了。
  • POREDAK:客人们很焦急,想知道以什么顺序准备和进食,才能使所有人吃完饭的总时间最短。

在第一个事件发生前,你需要输出 $N$ 位客人吃完饭所需的最短时间。对于每个 DOLAZIODLAZI 事件,你需要输出该事件发生后,餐厅门前剩余的客人群体吃完饭所需的最短时间。最后,在每个 POREDAK 事件后,你需要输出以什么顺序准备和进食,才能使当前门前的客人群体在最短时间内全部吃完。

输入格式

第一行包含两个自然数 $N$ 和 $K$。

接下来的 $N$ 行,每行包含两个自然数 $a_i$ 和 $b_i$ ($1 \le a_i, b_i \le 10^9$),表示标记为 $i$ 的客人准备食物需要 $a_i$ 分钟,进食需要 $b_i$ 分钟。

接下来的 $K$ 行,每行包含一个如上所述的关键事件。

你可以假设事件之间是相互一致的。也就是说,离开的客人一定已经到达。此外,餐厅门前在任何时刻至少会有一位客人,且新来客人的准备和进食速度遵循前述限制。

输出格式

第一行输出初始 $N$ 位客人吃完饭所需的最短时间。

如果第 $i$ 个事件是 DOLAZIODLAZI,则在第 $(i+1)$ 行输出该事件发生后,餐厅门前客人群体吃完饭所需的最短时间。

如果第 $i$ 个事件是 POREDAK,则在第 $(i+1)$ 行输出 $2x$ 个数字,其中 $x$ 是当前门前客人的数量。前 $x$ 个数字应包含客人按准备食物顺序的标记,后 $x$ 个数字应包含客人按进食顺序的标记。

子任务

子任务 分值 数据范围
1 5 $1 \le N \le 9, K = 1$, 唯一的事件是 POREDAK
2 13 $1 \le N \le 20, K = 1$, 唯一的事件是 POREDAK
3 21 $1 \le N \le 200\,000, K = 1$, 唯一的事件是 POREDAK
4 29 $1 \le N, K \le 200\,000$, 不存在 POREDAK 事件
5 32 $1 \le N, K \le 200\,000$, POREDAK 事件最多发生 10 次

样例

样例输入 1

2 1
1 3
2 3
POREDAK

样例输出 1

7
1 2 1 2

样例输入 2

1 4
4 3
DOLAZI 3 8
DOLAZI 5 2
ODLAZI 1
ODLAZI 3

样例输出 2

7
14
16
13
11

说明

第一个样例的说明: 标记为 1 的客人开始准备餐点并在第 1 分钟结束。随后该人开始进食,同时标记为 2 的客人开始准备他的餐点。在第 3 分钟,标记为 2 的客人完成了准备,但标记为 1 的客人尚未吃完,因此他必须等待直到第 4 分钟。最后,在第 4 分钟,标记为 2 的客人开始进食,并在第 7 分钟结束。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.