loj#P6935. 「ICPC World Finals 2023」时差

「ICPC World Finals 2023」时差

题目描述

ICPC World Finals 到了,其中有很多你想参加的活动——演讲、现场展示、趣味活动,更不用说比赛本身了。只有一个问题:你什么时候睡觉?

当你入睡时,你总是会设置一个闹钟,否则你就可能一直睡下去。用了闹钟,你就可以选择睡任意正整数分钟。在睡 kk 分钟后,你会再休息 kk 分钟(因此你将无法再次入睡);然后你将能够在第三个 kk 分钟内正常活动(因此你可以保持清醒,但如果你想睡觉,也可以直接睡)。

你知道 WF 所有活动的时间;你应该计划好自己的睡眠时间,以免错过任何活动的任何部分。就在 WF 开始前(第 00 分钟),你会经过长途旅行抵达酒店房间,需要立即入睡。

输入格式

第一行包含一个正整数 nn1n2000001\le n\le 200\,000),表示 WF 中活动的数量。

接下来 nn 行,第 ii 行包含两个正整数 bib_ieie_ibi<eib_i<e_ieibi+1e_i\le b_{i+1}0b1,en10100\le b_1,e_n\le 10^{10}),分别表示活动的开始和结束时间,按 WF 开始的时间计算,以分钟为单位。

输出格式

如果可以规划一个睡眠时间表,使你能够完整地参加所有计划的活动,那么就按下列格式输出一个时间表。否则,输出 impossible

睡眠时间表由第一行输出的睡眠时段数 pp1p1061\le p\le 10^6)和后面的 pp 行确定。其中第 ii 行包含两个整数 sis_itit_i,即第 ii 个睡眠时段的开始和结束时间,从 WF 开始算起,以分钟为单位。注意不应输出在最后一个活动结束后的睡眠时段。

睡眠时段必须满足 0=s1<t1<s2<t2<<tpbn0=s_1<t_1<s_2<t_2<\ldots<t_p\le b_n 和题目描述中不允许在醒来之后的某些时间内睡觉的条件。你可以在某个活动之后立刻睡觉(因此可能有 si=ejs_i=e_j)或者恰好在某个活动开始之前醒来(因此可能有 ti=bjt_i=b_j)。

如果有多个合法的睡眠时间表,那么输出任何一个都可以。可以证明,如果存在一个合法的睡眠时间表,那么也存在一个最多有 10610^6 个睡眠时段的合法睡眠时间表。

3
30 45
60 90
120 180

2
0 30
90 120

1
0 60

impossible

7
31 32
35 41
48 55
69 91
1000 2022
2022 2023
2994 4096

5
0 5
10 28
56 68
92 900
2025 2900