最少区间覆盖指定区间
题意
给你n个区间,li ,ri,给你指定区间[s,t],求最少区间覆盖指定区间
分析
先对排序li,在对ri最大贪
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
typedef pair<ll,ll> pa;
pair<ll,ll> p[100010];
bool cmp(pa p1,pa p2){
return p1.first<p2.first;
}
ll id[100010];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//freopen("in.txt","r",stdin);
ll n,i,s,t;
cin>>n;
for(i=0;i<n;i++)
{
cin>>p[i].first>>p[i].second;
}
cin>>s>>t;
memset(id,0,sizeof(id));
sort(p,p+n,cmp);
for(i=0;i<n;i++){
if(p[i].first>t||p[i].second<s)
id[i]=0;
}
ll sum=0;
ll now=s,to=-(1<<30);
bool flag=0;
for(i=0;i<n;i++){
if(p[i].first>t) {
break;
flag=1;
}
if(!id[i]&&p[i].first<=now) {
to=max(p[i].second,to);
if(i==n-1) {
now=to;
sum+=1;
}
if(p[i+1].first>now){
sum++;
now=to,to=-(1<<30);
if(now>=t) break;
}
}
}
if(flag||now<t) cout<<"No answer!\n";
else
cout<<sum<<endl;
return 0;
}