我们需要找出最小的非负整数秒 t,使得 t 不被任何一个预约区间 [l,r] 覆盖。
由于 n 最大可达 2×105,直接检查每一个整数秒是不可行的。我们可以采用排序加“合并”覆盖区间的方法:
ans,表示当前最早可能空闲的时刻,初始值为 0。系统记录了 n 个预约,每个预约占用一段连续的整数秒,表示为闭区间 [l,r],即从 l 到 r(包含两端)之间的每一个整数秒都被占用。
请你找出最小的非负整数秒 t,使得 t 不被任何一个预约区间所覆盖。换句话说,不存在预约区间 [li,ri] 满足 li≤t≤ri。
约束:预约数量 n 满足 1≤n≤2×105;每个区间的左右端点均为整数且满足 0≤l≤r≤1018。
第一行包含一个整数 n,表示预约的个数。 接下来 n 行,每行包含两个整数 l 和 r,表示一个预约占用的闭区间 [l,r]。 数据保证 n 不超过 2×105,且 0≤l≤r≤1018。
输出一个整数,表示第一个未被任何预约占用的整数秒。
输入
4
0 5
3 7
6 10
12 15
输出
11
说明
将区间按起点排序后依次处理:
ans = 0。ans 被占用,更新为 5+1=6。ans 仍被占用,更新为 7+1=8。ans 被占用,更新为 10+1=11。12 > 11,说明时刻 11 未被该区间及之前任何区间覆盖,算法终止。因此第一个空闲时刻为 11。
输入
2
1 3
4 6
输出
0
说明
所有区间的起点均大于 0,时刻 0 不在任何预约区间内。
ans = 0。1 > 0,ans = 0 不被覆盖,直接得到答案。因此输出 0。
输入
3
0 0
2 2
4 4
输出
1
说明
预约占用的是三个孤立时刻 0、2、4。
ans = 0。ans 被占用,更新为 0+1=1。2 > 1,说明时刻 1 未被占用,算法停止。因此最小的空闲秒为 1。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册