题目:
给定 𝑁 个闭区间 [ai,bi][𝑎𝑖,𝑏𝑖] 以及一个线段区间 [s,t][𝑠,𝑡],请你选择尽量少的区间,将指定线段区间完全覆盖。
输出最少区间数,如果无法完全覆盖则输出 −1−1。
模板:
#include<bits/stdc++.h>
using namespace std;
pair<int,int> range[100005];
int n;
int main(){
int st,ed;
scanf("%d%d",&st,&ed);
scanf("%d",&n);
for(int i=0;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
range[i]={x,y};
}
sort(range,range+n,[&](pair<int,int>a,pair<int,int> b)->bool{return a.first<b.first;});
int res=0;
bool ok=false;
for(int i=0;i<n;i++){
int j=i,ind=-2e9;
while(j<n&&range[j].first<=st){
ind=max(ind,range[j].second);
j++;
}
if(ind<st)break;
st=ind;
res++;
if(ind>=ed){
ok=true;
break;
}
i=j-1;
}
printf("%d",ok?res:-1);
return 0;
}