码迷,mamicode.com
首页 > 其他好文 > 详细

区间覆盖

时间:2020-03-22 01:36:32      阅读:73      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!