在古老的波罗的海宗教中,保持圣火燃烧至关重要。一位被称为 krivis 的祭司负责保护圣火不熄灭。他有许多值得信赖的助手,被称为 vaidilutės,他希望为她们制定一个轮班表来照看和保护圣火。他必须确保圣火时刻都有某位 vaidilutė 在照看。
Krivis 有自己的一套时间测量系统,每天有 $M$ 分钟。他的村子里有 $N$ 位 vaidilutės。第 $i$ 位 vaidilutė 的可能工作时间由两个整数 $s_i$ 和 $e_i$ 描述。数字 $s_i$ 是她一天中可以开始工作的最早时间,数字 $e_i$ 是她需要结束工作的最晚时间。时间以从当天开始计算的分钟数表示。注意,当 $s_i > e_i$ 时,该 vaidilutė 愿意通宵工作。
Krivis 请你选择一些 vaidilutės 并为她们安排轮班。被选中的 vaidilutė 开始轮班的时间不得早于 $s_i$,结束轮班的时间不得晚于 $e_i$。单次轮班的时间总是短于一整天。被选中的 vaidilutės 每天都会重复她们的轮班。
从一位 vaidilutė 交接给下一位会增加圣火熄灭的风险。因此,你希望最小化一天中发生交接的次数,并安排一个所需 vaidilutės 人数最少的方案。
题目描述
计算你需要选择的最少 vaidilutės 数量,使得圣火时刻得到照看。
输入格式
第一行包含两个整数 $N$ 和 $M$ —— 可用的 vaidilutės 数量和一天的长度(以分钟为单位)。
接下来 $N$ 行,第 $i$ 行包含两个整数 $s_i$ 和 $e_i$ —— 第 $i$ 位 vaidilutė 的最早开始时间和最晚结束时间。
输出格式
输出一个整数 —— 你需要选择的最少 vaidilutės 数量。如果无法按照要求选择 vaidilutės,则输出 $-1$。
样例
样例输入 1
4 100 10 30 30 70 20 40 60 20
样例输出 1
3
说明 1
你可以选择第 1、第 2 和第 4 位 vaidilutės 并安排轮班如下: 第 1 位 vaidilutė 从第 10 分钟工作到第 30 分钟。 第 2 位 vaidilutė 从第 30 分钟工作到第 70 分钟。 第 4 位 vaidilutė* 从第 70 分钟工作到次日的第 10 分钟。
样例输入 2
1 100 30 40
样例输出 2
-1
说明 2
无法制定时间表,因为只有一位 vaidilutė,且她无法工作一整天。
数据范围
- $1 \le N \le 2 \cdot 10^5$
- $2 \le M \le 10^9$
- $0 \le s_i, e_i < M$ (对于所有 $1 \le i \le N$)
- $s_i \neq e_i$ (对于所有 $1 \le i \le N$)
子任务
| 编号 | 分值 | 附加限制 |
|---|---|---|
| 1 | 14 | $N \le 20$ |
| 2 | 17 | $N \le 300$ |
| 3 | 9 | $N \le 5\,000$ |
| 4 | 13 | 对于所有 vaidilutės,满足 $s_i < e_i$ 或 $e_i = 0$ |
| 5 | 21 | 对于每位 vaidilutė,从时间 $s_i$ 到时间 $e_i$ 的时间间隔长度相同 |
| 6 | 26 | 无附加限制 |