#1048. 洗澡(shower.cpp)

洗澡(shower.cpp)

题目描述

小泽同学每天都来参加集训,他面临一个艰巨的挑战——洗澡。为了不产生诡异的味道,他尝试每天洗澡,但尽管尽了最大努力,总是会遇到一些困难。他洗澡需要 s s 分钟,而一天只有 m m 分钟!

他一天已经安排了 n n 个任务。第 i i 个任务表示为一个时间区间 (li,ri)(l_i, r_i),这意味着小泽在该时间区间内(严格在 li l_i ri r_i 之间的任何时刻)忙碌,无法洗澡。没有两个任务时间区间会重叠。

给定所有 n n 个时间区间,小泽能否在这一天洗澡?换句话说,小泽是否会有一个至少长 s s 分钟的空闲时间区间?

例如,在第一个测试样例中,小泽可以在一天的前 3 3 分钟洗澡,并且不会错过任何任务。

输入格式

第一行包含三个整数 n n s s m m 1n2105 1 \leq n \leq 2 \cdot 10^5 1s,m109 1 \leq s, m \leq 10^9 )—— 小泽已经安排的时间区间的数量,小泽洗澡需要的时间,以及一天的总分钟数。

接下来 n n 行,每行包含两个整数 li l_i ri r_i 0li<rim 0 \leq l_i < r_i \leq m )—— 第 i i 个任务的时间区间。没有两个任务的时间区间会重叠。

额外的输入约束条件:对于每个 i>1 i > 1 li>ri1 l_i > r_{i-1}

输出格式

共两行,第一行是“YES”或“NO”,"YES"代表小泽如果小泽可以洗澡,"NO"代表小泽没办法洗澡;

第二行是小泽可以连续洗澡的最长时间。

样例 #1

样例输入 #1

3 3 10
3 5
6 8
9 10

样例输出 #1

YES
3

样例 #2

样例输入 #2

3 3 10
1 2
3 5
6 8

样例输出 #2

NO
2

样例 #3

样例输入 #3

3 3 10
4 5
6 8
9 10

样例输出 #3

YES
4

提示

对于 80% 80 \% 的数据,1n2103 1 \leq n \leq 2 \cdot 10^3 1s,m106 1 \leq s, m \leq 10^6

对于 100% 100 \% 的数据, 1n2105 1 \leq n \leq 2 \cdot 10^5 1s,m109 1 \leq s, m \leq 10^9