Acwing907 区间覆盖

贪心

#include <bits/stdc++.h>
using namespace std;
int n;
#define MAXN 100010
int a[MAXN],b[MAXN];
int st,ed;

struct Range{
    int l,r;
    bool operator < (Range& w){
        if(l==w.l) return r>w.r;
        return l<w.l;
    }
}range[MAXN];

int main(){
    cin>>st>>ed;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>range[i].l>>range[i].r;
    }
    sort(range,range+n);
    int res =0 ;
    bool success = false;
    for(int i=0;i<n;i++){
        int j = i,r = -2e9;
        while(j<n && range[j].l<=st) {
            r = max(r,range[j].r);
            j++;
        }
        if(r<st) break;
        res++;
        if(r>=ed){
            success = true;
            break;
        }
        st = r;
        i = j-1;
    }
    if(!success) res=-1;
    printf("%d\n",res);

    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
02-16 22:33
杉川机器人 嵌入式工程师 18.0k*13.0, 年终奖1~9个月浮动
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务