zoukankan      html  css  js  c++  java
  • AcWing 906. 区间分组 区间贪心

    //1.将所有区间按左端点从小到大排序
    //2.从前往后处理每个区间,判断能否将其放到某个现有的组中
    //判断某一组的最后一个区间的右端点是否小于该区间的左端点
    //如果大于或等于,就开新组,如果小于,就放到组里去,并更新最后一个区间的右端点
    #include <iostream>
    #include <algorithm>
    #include <queue>
    using namespace std;
    const int N = 100010;
    int n;
    struct Range {
        int l, r;
        bool operator< (const Range &W)const {
            return l < W.l;
        }
    } range[N];
    int main() {
        scanf("%d", &n);
        for (int i = 0; i < n; i ++ ) {
            int l, r;
            scanf("%d%d", &l, &r);
            range[i] = {l, r};
        }
        sort(range, range + n);
        priority_queue<int, vector<int>, greater<int>> heap;//维护所有组的右端点的最大值
        for (int i = 0; i < n; i ++ ) {
            auto r = range[i];
            if (heap.empty() || heap.top() >= r.l)
                heap.push(r.r);
            else {
                heap.pop();
                heap.push(r.r);
            }
        }
        printf("%d
    ", heap.size());
        return 0;
    }
  • 相关阅读:
    字符串练习
    python基础
    熟悉常用的Linux操作
    大数据概述
    递归下降分析程序
    自动机
    词法语法分析1
    关于我对编译原理的理解
    6小时学会TypeScript入门实战教程(大地)
    kotlin
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11909463.html
Copyright © 2011-2022 走看看