P11027 [COTS 2020] 餐厅 Restoran

题目背景

译自 [Izborne Pripreme 2020 (Croatian IOI/CEOI Team Selection)](https://hsin.hr/pripreme2020/) D2T2。$\texttt{2s,0.5G}$。

题目描述

苏联餐厅前有 $N$ 个人在排队,按顺序标号 $1\sim N$。 餐厅内只有一种菜,同时也是招牌菜——煎蛋。餐厅内没有厨师,所以食物由客人自己烹饪。 由于设备有限,**同一时刻最多有一个人可以烹饪,同一时刻最多有一个人可以用餐。** 定义:「用餐总时间」为从第一个人开始准备食物,到最后一个人用完餐,需要的时间。 烹饪和用餐不一定按顺序,先烹饪的客人可以后用餐。 第 $i$ 个人的烹饪时间为 $a_i$,用餐时间为 $b_i$。你需要求出最优情况下,用餐总时间的最小值。 此外,还有 $M$ 个事件: - $\texttt{DOLAZI a b}$:新来了一位新客人,他的烹饪时间为 $a$,用餐时间为 $b$。设这是第 $i$ 位新来的客人,则标号为 $(N+i)$。 - $\texttt{ODLAZI x}$:第 $x$ 位客人离开队伍。 - $\texttt{POREDAK}$:客人很不耐烦,想要知道最优的策略,使得用餐总时间最短。 对于前两个类型的事件,你需要求出这个事件结束后,用餐总时间的最小值; 对于第三个类型的事件,你需要求出此时最佳的烹饪、用餐顺序。

输入格式

第一行,两个正整数 $N,M$。 接下来 $N$ 行,第 $i$ 行两个正整数 $a_i,b_i$。 接下来 $M$ 行,每行描述一个事件。 数据保证事件合法,且每一时刻至少存在一名客人。

输出格式

输出 $(M+1)$ 行。 第一行,输出初始时用餐总时间的最小值。 接下来 $M$ 行,对于第 $i$ 行: - 若第 $i$ 个事件为 $\texttt{DOLAZI}$ 或 $\texttt{ODLAZI}$ ,输出一个整数,表示这个事件结束后,用餐总时间的最小值; - 否则,设当前有 $k$ 个客人,输出 $2k$ 个整数,描述最优策略:前 $k$ 个整数表示烹饪的顺序,后 $k$ 个整数表示用餐的顺序。

说明/提示

#### 数据范围 对于 $100\%$ 的数据,保证: - $1\le N,M\le 2\times 10^5$; - $1\le a_i,b_i,a,b\le 10^9$; - 事件合法,且每一时刻至少存在一名客人; - **$\texttt{POREDAK}$ 事件最多只有 $\bf 10$ 个。** | 子任务编号 | $N\le $ | $M\le $ | 特殊性质 | 得分 | | :--: | :--: | :--: | :--: | :--: | | $ 1 $ | $9$ | $ 1 $ | A | $ 5 $ | | $ 2 $ | $20$ | $1$ | A | $ 13 $ | | $ 3 $ | $2\times 10^5$ | $1$ | A | $ 21 $ | | $ 4 $ | $2\times 10^5$ | $2\times 10^5$ | B | $ 29 $ | | $ 5 $ | $2\times 10^5$ | $2\times 10^5$ | | $ 32 $ | - 特殊性质 A:只有 $\texttt{POREDAK}$ 事件。 - 特殊性质 B:没有 $\texttt{POREDAK}$ 事件。