检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。
#题面
#题目描述
在数轴上有 个闭区间 。现在要从中选出 个区间,使得这 个区间共同包含至少一个位置。换句话说,就是使得存在一个 ,使得对于每一个被选中的区间 ,都有 。
对于一个合法的选取方案,它的花费为被选中的最长区间长度减去被选中的最短区间长度。区间 的长度定义为 ,即等于它的右端点的值减去左端点的值。
求所有合法方案中最小的花费。如果不存在合法的方案,输出 。
#输入格式
第一行包含两个正整数 用空格隔开,意义如上文所述。保证 。
接下来 行,每行表示一个区间,包含用空格隔开的两个整数 和 为该区间的左右端点。
#输出格式
只有一行,包含一个正整数,即最小花费。
#输入输出样例
样例输入 #1
6 3
3 5
1 2
3 4
2 2
1 5
1 4
样例输出 #1
2
样例解释 #1
如图,当 时,花费最小的方案是选取 、、 这三个区间,他们共同包含了 这个位置,所以是合法的。其中最长的区间是 ,最短的区间是 ,所以它的花费是 。
#数据范围与提示
本题共 20 个测试点,各测试点信息见下表。
测试点编号 | |||
---|---|---|---|
1 | |||
2 | |||
3 | |||
4 | |||
5 | |||
6 | |||
7 | |||
8 | |||
9 | |||
10 | |||
11 | |||
12 | |||
13 | |||
14 | |||
15 | |||
16 | |||
17 | |||
18 | |||
19 | |||
20 |
对于 的测试数据,保证 ,,,。
#思路
先将所有线段按照长度排序,然后依次将线段覆盖到数轴上。这个过程可以使用线段树维护,每覆盖一段区间就将区间内所有点的计数 。
如果在第 次覆盖后某个点被覆盖了超过 层,那么就可以更新答案了。然后将最早覆盖的线段从数轴上移除,直到数轴上不存在被覆盖的层数 的点。
由于题目所求的是「所有合法方案中最小的花费」,所以不需要考虑选取线段的总数量。
最后,根据数据范围中的「」可知本题需要离散化。
#代码
1 |
|