zoukankan      html  css  js  c++  java
  • 907. 区间覆盖(贪心)

       分析:先按区间左端点进行排序,然后遍历区间,找一个区间左右端点覆盖起始点,右端点尽量远,直到可以覆盖目标区间右端点

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 100010;
    struct Edge{int a, b;} edges[N];
    bool operator <(Edge e1, Edge e2) {
        return e1.a < e2.a;
    }
    int n;
    
    int main() {
        int st, ed;
        scanf("%d%d",&st,&ed);
        scanf("%d",&n);
        for(int i = 0; i < n; i++) {
            int a, b ;
            scanf("%d%d",&a,&b);
            edges[i] = {a,b};
        }
        sort(edges,edges+n);
        int res = 0;
        bool f = false;
        for(int i = 0; i < n; i++) {
            int j = i, r = -2e9;
            while(j < n && edges[j].a <= st) {
                r = max(r,edges[j].b);
                j++;
            }
            if(r < st) {
                res = -1;
                break;
            }
            res ++;
            if(r >= ed) {
                f = true;
                break;
            }
            st = r;
            i = j - 1;
        } 
        if(!f) res = - 1;
        printf("%d
    ",res);
        return 0;
    }
  • 相关阅读:
    android slidingview
    关于打工
    android开发基本流程
    android and javascript
    android listview and scrollview
    google收购的公司
    android反编译
    android资料
    colors
    【读书笔记】-- 文本可视化研究综述
  • 原文地址:https://www.cnblogs.com/yonezu/p/13565416.html
Copyright © 2011-2022 走看看