最少区间覆盖指定区间

题意

给你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;
}
posted @ 2018-10-16 23:13  ChunhaoMo  阅读(477)  评论(0编辑  收藏  举报