标签:return print style 区间覆盖 opera its 区间完全覆盖 pac max
# 题意
N个闭区间[ai,bi]以及一个线段区间[s,t],请你选择尽量少的区间,将指定线段区间完全覆盖。
输出最少区间数,如果无法完全覆盖则输出-1。
# 题解
1.按照左端点从小到大排序
2.从前往后依次枚举每个区间,在所有能覆盖的start区间中选择右端点最大的区间,然后将start更新成右端点的最大值
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e5+10; 4 struct Range 5 { 6 int l, r; 7 bool operator< (const Range &W)const 8 { 9 return l < W.l; 10 } 11 }ele[N]; 12 int n; 13 int main(){ 14 int st,ed; 15 scanf("%d%d", &st, &ed); 16 scanf("%d", &n); 17 for(int i=0;i<n;i++) cin>>ele[i].l>>ele[i].r; 18 19 sort(ele,ele+n); 20 21 int res = 0; 22 bool success = false; 23 24 for(int i=0;i<n;i++){ 25 int j=i,r= -2e9 ; 26 while(j < n && ele[j].l <= st) 27 { 28 r = max( r , ele[j].r ); 29 j++; 30 } 31 32 if(r<st){ 33 res=-1; 34 break; 35 } 36 res++; 37 38 if(r>=ed){ 39 success = true; 40 break; 41 } 42 st = r; 43 i = j - 1; 44 } 45 46 if(!success) res = -1; 47 48 printf("%d\n",res); 49 return 0; 50 }
标签:return print style 区间覆盖 opera its 区间完全覆盖 pac max
原文地址:https://www.cnblogs.com/hhyx/p/12543677.html