问题描述
给出一段长度为n的区间和m条线段,每条线段有其起始点xi和终止点yi,现在我们想知道最少用几条线段就可以覆盖这一个区间。
输入格式
第一行包含两个整数n,m
接下来m行 每行两个数 xi yi 保证 xi<=yi
输出格式
输出1行,包含一个整数,表示最少线段数。如果无法覆盖 输出-1;
样例输入
5 3
1 3
3 4
4 5
样例输出
3
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T=sc.nextInt();
int n=sc.nextInt();
Job[]jobs=new Job[n];
for(int i=0;i<n;i++){
jobs[i]=new Job(sc.nextInt(),sc.nextInt());
}
Arrays.sort(jobs);
int start=1;
int end=1;
int ans=1;
for(int i=0;i<n;i++){
int s=jobs[i].s;
int t=jobs[i].t;
if(i==0&&s>1){
break;
}
if(s<=start){
end=Math.max(t,end);
}else{
ans++;
start=end+1;
if(s<=start){
end=Math.max(t,end);
}else{
break;
}
}
if(end>=T){
break;
}
}
if(end<T){
System.out.println(-1);
}else{
System.out.println(ans);
}
}
private static class Job implements Comparable<Job>{
int s;
int t;
public Job(int s,int t){
this.s=s;
this.t=t;
}
@Override
public int compareTo(Job o) {
int x=this.s-o.s;
if(x==0){
return this.t-o.t;
}
else {
return x;
}
}
}
}