• 【区间分组】 Stall Reservations


    传送门

    题意

    (n)头牛,每头牛有一个开始吃草的时间和结束吃草的时间,当两头牛之间存在交点的时候,
    这两头牛不能安排在同一个畜栏吃草,求需要的最小畜栏数目和每头牛对应的畜栏方案

    数据范围

    (egin{array}{l}1 leq N leq 50000 \ 1 leq A, B leq 1000000end{array})

    题解

    贪心步骤:
    (1)将所有牛按开始吃草的时间排序;
    (2)用小根堆维护当前所有畜栏的最后一头牛的吃草结束时间;
    (3)如果当前的牛可以安排在右边界最小的中,则将其安排进去,否则最小的都加不进去其他的更不可能加进去,入堆即可;
    需要保存排序前的下标最后再映射回去按照原来的下标输出答案。
    时间复杂度:
    排序 (O(nlogn)),依次枚举每头牛的过程中,只涉及到常数次堆的操作,时间复杂度至多是 (O(logn))
    所以总时间复杂度是 (O(nlogn))

    Code

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,n) for(int i=a;i<n;i++)
    #define per(i,a,n) for(int i=n-1;i>=a;i--)
    #define ll long long
    #define fi first
    #define se second 
    typedef pair<int,int> pii;
    const int N=5e4+10;
    int n;
    int ans[N];
    struct Node{
        int l,r;
        int idx,belong;
        bool operator <(const Node &x)const {
            return l<x.l;
        }
    }cow[N];
    priority_queue<pii,vector<pii>,greater<pii>>heap;
    int main(){
        scanf("%d",&n);
        rep(i,0,n) {
            scanf("%d%d",&cow[i].l,&cow[i].r);
            cow[i].idx=i;
        }
        sort(cow,cow+n);
        rep(i,0,n){
            int num=heap.size();
            if(num && cow[i].l > heap.top().fi){
                int t = cow[i].belong=heap.top().se;
                heap.pop();
                heap.push({cow[i].r,t});
                continue;
            }
            cow[i].belong=++num;
            heap.push({cow[i].r,num});
        }
        printf("%d
    ",heap.size());
        rep(i,0,n) ans[cow[i].idx] = cow[i].belong;
        rep(i,0,n) printf("%d
    ",ans[i]);
    }
    
  • 相关阅读:
    sql server 2008数据库 降为 sql server 2005数据库 最终方案总结
    android 单元测试
    C# 5.0中引入了async 和 await
    Android之NDK开发
    Java NIO原理 图文分析及代码实现
    【第六篇】Volley之https相关
    【第五篇】Volley代码修改之图片二级缓存以及相关源码阅读(重写ImageLoader.ImageCache)
    【第四篇】Volley修改之GsonRequest
    java复习 --集合类
    android 图片加载优化,避免oom问题产生
  • 原文地址:https://www.cnblogs.com/hhyx/p/13156817.html
Copyright © 2020-2023  润新知