Skip to content

Latest commit

 

History

History

0907

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

题目

给定 $N$ 个闭区间 $[a_i,b_i]$ 以及一个线段区间 $[s,t]$,请你选择尽量少的区间,将指定线段区间完全覆盖。

输出最少区间数,如果无法完全覆盖则输出 $-1$

输入格式

第一行包含两个整数 $s$$t$,表示给定线段区间的两个端点。

第二行包含整数 $N$,表示给定区间数。

接下来 $N$ 行,每行包含两个整数 $a_i,b_i$,表示一个区间的两个端点。

输出格式

输出一个整数,表示所需最少区间数。

如果无解,则输出 $-1$

数据范围

$1 \le N \le 10^5$,

$-10^9 \le a_i \le b_i \le 10^9$,

$-10^9 \le s \le t \le 10^9$

输入样例:

1 5
3
-1 3
2 4
3 5

输出样例:

2

题解

前置题目:0906

前置知识:双指针

本题知识:贪心-区间问题

思路

  1. 将所有区间按左端点从小到大排序
  2. 枚举区间,选择能覆盖 start 且右端点伸出最远的区间,更新 start 为该区间右端点的值

证明

设存在一个选择方法得出的区间数量比算法所求的要小,可以比对两种选择方法找到第一个不同的区间,因为算法选择的是伸出最远的区间,所以都可以通过延长假想选择的区间来保证两个区间的一致同时不影响下一个区间的选择。以此类推,最终两个区间完全一致,故算法所求即是最少的选法。

细节

  • 是区间覆盖,而不是整数点集的覆盖
    • s = r
  • 不漏任何一个区间
    • i = j - 1