题目:
题解:
贪心策略
先按照左端点排序,对于每一次选择,选择当前区间的左端点能覆盖到线段左端点的区间,并且覆盖到的线段的右端点是最长的那个,如果不能覆盖则无解
#include <bits/stdc++.h>
using namespace std;
struct node {
long long a,b;
}e[100005];
bool cmp(node x,node y)
{
return x.a<y.a;
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
long long s,t,n;
cin>>s>>t>>n;
for(int i=0;i<n;i++)
{
cin>>e[i].a>>e[i].b;
}
sort(e,e+n,cmp);
long long rt=s;
long long ans=0;
int f=0;
for(int i=0;i<n;i++)
{
long long r=-2e9;
while(i<n&&e[i].a<=rt)
{
r=max(r,e[i].b);
i++;
}
ans++;
i--;
if(r<rt) break;
rt=r;
if(rt>=t)
{
f=1;
break;
}
}
if(!f) cout<<-1<<endl;
else cout<<ans<<endl;
return 0;
}