题目:详细可以搜acwing 区间的覆盖
思路:首先定义结构体,将各区间存储在结构体中,然后按左端点从小到大排序,搜索所有能覆盖指定区间的区间,不断更新右端点,知道能够完全覆盖指定的区间。
参考证明:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=100010;
int n;
struct Range{
int l,r;
bool operator< (const Range &w)const
{
return l<w.l;
}
}range[N];
int main()
{
int ed,st;
cin>>st>>ed;
scanf("%d",&n);
int res=0;
bool success=false;
for(int i=0;i<n;i++)
{
int l,r;
cin>>l>>r;
range[i]={l,r};
}
sort(range,range+n);
for(int i=0;i<n;i++)
{
int r=-2e9;
int j=i;
while(j<n&&range[j].l<=st)
{
r=max(r,range[j].r);
j++;
}
if(r<st)
{
res=-1;
break;
}
res++;
if(r>=ed)
{
success=true;
break;
}
st=r;
i=j-1;
}
if(!success) res=-1;
cout<<res;
return 0;
}