zoukankan      html  css  js  c++  java
  • [CF754D] Fedor and coupons

    [CF754D] Fedor and coupons - 贪心,堆

    Description

    给出n个区间,要求选出k个区间,是k个区间的并尽可能大

    Solution

    按 l 排序后顺序扫描,用一个堆维护 l 不超过当前的,最大的 k 个 r

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 1e6 + 5;
    int n, k;
    
    struct Node
    {
        int l, r, id;
    
        bool operator<(const Node &rhs)
        {
            return l < rhs.l;
        }
    } a[N];
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        cin >> n >> k;
        for (int i = 1; i <= n; i++)
        {
            cin >> a[i].l >> a[i].r;
            a[i].id = i;
        }
    
        sort(a + 1, a + n + 1);
    
        int ans = 0, ansx = 0;
    
        priority_queue<int, vector<int>, greater<int>> que;
        for (int i = 1; i <= n; i++)
        {
            que.push(a[i].r);
            while (que.size() > k)
                que.pop();
            if (que.size() == k)
            {
                if (que.top() - a[i].l + 1 > ans)
                {
                    ans = que.top() - a[i].l + 1;
                    ansx = a[i].l;
                }
            }
        }
    
        int left = ansx, right = ansx + ans - 1;
        if (right < left)
            right = -2e9, left = 2e9;
    
        vector<int> res;
        for (int i = 1; i <= n; i++)
            if (a[i].l <= left && a[i].r >= right)
                res.push_back(a[i].id);
    
        cout << ans << endl;
        for (int i = 0; i < k; i++)
            cout << res[i] << " ";
        cout << endl;
    }
    
  • 相关阅读:
    MySQL数据模型
    Spring循环依赖
    @Autowired和@Resource区别
    Kafka概念
    阻塞队列
    线程池原理
    Spring AOP
    JVM 史上最最最完整深入解析(12000 字噢)
    Dubbo配置信息
    友情链接
  • 原文地址:https://www.cnblogs.com/mollnn/p/14647766.html
Copyright © 2011-2022 走看看