1121: 最小区间覆盖问题

本题是区间贪心的一种:在满足覆盖[LR]区间的情况下,最少能选择多少个区间?
自己写的死活通不过

#include <bits/stdc++.h>
using namespace std;
struct node{
	int l,r;
}T[100005];
bool cmp(node a, node b ){
	return a.l<b.l;
}
int main(){
	int i,n,max_reach,r_current,ans,L,R;
	while(scanf("%d%d%d",&n,&L,&R)!=EOF){
		for(i=0;i<n;i++)
			{
			scanf("%d%d",&T[i].l,&T[i].r);}
		if(L==R){
			ans=-1;
			for(i=0;i<n;i++){
				if(T[i].l<=L&&T[i].r>=R){
					ans=1;
					break;
				}
			}
			printf("%d\n",ans);
			continue;
		}
		sort(T,T+n,cmp);
		r_current=L,i=0,ans=0;
		while(r_current<R){
			for(max_reach=-1e9;i<n&&T[i].l<=r_current;i++){
				max_reach = max(max_reach,T[i].r);
			}
			if(max_reach<=r_current){
				ans=-1; //既然还需要找备用区间,但备用区间没法带来更新,说明完蛋了 
				break;
			}
			r_current =max_reach ,ans++;
		}
		//if(r_current < R) ans=-1;
		printf("%d\n",ans); 
	}
	return 0;
}```
posted @ 2026-03-04 00:32  peter_shen  阅读(13)  评论(0)    收藏  举报