[USACO06FEB] Stall Reservations 贪心

\(n\)头牛,每头牛占用时间区间\([l_i,r_i]\),一个牛棚每个时间点只能被一头牛占用,问最少新建多少个牛棚,并且每头牛在哪个牛棚里?

比较巧的\(O(n)\)扫一遍做法,用一个小跟堆维护所有牛棚最后一个牛占用的时间(即\(r_i\)),贪心的想,如果最先结束的那个牛棚都不能满足当前牛,那么我们只能新开一个牛棚,并继续维护小根堆;如果那个牛棚满足,那么这个牛就去那个牛棚,更新当前牛棚最后占用时间。

#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
inline int read(){
char ch=getchar();int s=0;
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9') s=s*10+(ch^'0'), ch=getchar();
return s;
}
struct nod{
int cnt,last;
const bool operator < (const nod &a) const{
return last>a.last; // 小根堆
}
nod(int cnt, int last):cnt(cnt),last(last){}
};
#define MAXN 50005
struct nod2{
int l,r,id;
const bool operator < (const nod2 &a) const{
if(l==a.l) return r<a.r;
return l<a.l;
}
} a[MAXN];
int ans[MAXN];
priority_queue<nod> q;
int n;
int sum=0;
int main(){
n=read();
for(int i=1;i<=n;++i) a[i].id=i,a[i].l=read(),a[i].r=read();
sort(a+1, a+1+n);
q.push(nod(1, a[1].r));
ans[a[1].id]=1;
++sum;
for(int i=2;i<=n;++i){
nod cur=q.top();
if(cur.last>=a[i].l){
++sum; // 新开牛棚
ans[a[i].id]=sum;
q.push(nod(sum, a[i].r));
}else{
q.pop(); // 更新牛棚最后结束时间
ans[a[i].id]=cur.cnt;
q.push(nod(cur.cnt, a[i].r));
}
}
printf("%d\n", sum);
for(int i=1;i<=n;++i) printf("%d\n", ans[i]);
return 0;
}

[USACO06FEB] Stall Reservations 贪心的更多相关文章

  1. POJ 3190 Stall Reservations贪心

    POJ 3190 Stall Reservations贪心 Description Oh those picky N (1 <= N <= 50,000) cows! They are s ...

  2. POJ - 3190 Stall Reservations 贪心+自定义优先级的优先队列(求含不重叠子序列的多个序列最小值问题)

    Stall Reservations Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one w ...

  3. poj 3190 Stall Reservations 贪心 + 优先队列

    题意:给定N头奶牛,每头牛有固定的时间[a,b]让农夫去挤牛奶,农夫也只能在对应区间对指定奶牛进行挤奶, 求最少要多少个奶牛棚,使得在每个棚内的奶牛的挤奶时间不冲突. 思路:1.第一个想法就是贪心,对 ...

  4. [POJ3197]Stall Reservations (贪心)

    题意 (来自洛谷) 约翰的N(l<N< 50000)头奶牛实在是太难伺候了,她们甚至有自己独特的产奶时段.当 然对于某一头奶牛,她每天的产奶时段是固定的,为时间段A到B包括时间段A和时间段 ...

  5. poj3190 Stall Reservations (贪心+优先队列)

    Cleaning Shifts Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) To ...

  6. POJ3190 Stall Reservations 贪心

    这是个典型的线程服务区间模型.一些程序要在一段时间区间上使用一段线程运行,问至少要使用多少线程来为这些程序服务? 把所有程序以左端点为第一关键字,右端点为第二关键字从小到大排序.从左向右扫描.处理当前 ...

  7. [USACO06FEB]摊位预订Stall Reservations(贪心)

    [USACO06FEB]摊位预订Stall Reservations 题目描述 Oh those picky N (1 <= N <= 50,000) cows! They are so ...

  8. 洛谷P2859 [USACO06FEB]摊位预订Stall Reservations

    P2859 [USACO06FEB]摊位预订Stall Reservations 题目描述 Oh those picky N (1 <= N <= 50,000) cows! They a ...

  9. bzoj1651 / P2859 [USACO06FEB]摊位预订Stall Reservations

    P2859 [USACO06FEB]摊位预订Stall Reservations 维护一个按右端点从小到大的优先队列 蓝后把数据按左端点从小到大排序,顺序枚举. 每次把比右端点比枚举线段左端点小的数据 ...

随机推荐

  1. Vue 项目 VSCode 调试

    调试Vue搭建的前端项目 在项目根目录下的vue.config.js中添加: module.exports = { lintOnSave: false, //关闭eslint语法校验 //填写这部分 ...

  2. MyBatis和spring整合简单实现

    spring和MyBatis整合: 导入spring和MyBatis的整合jar包,以及其依赖jar包: 导入MyBatis和spring的整合jar包. spring的核心jar包. 定义Mybat ...

  3. 2019 波克城市ava面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.波克城市等公司offer,岗位是Java后端开发,最终选择去了波克城市. 面试了很多家公司,感觉大部分公司考察的点 ...

  4. MPSoc之Hello World学习笔记

    XILINX 新一代 SOC,Zynq UltraScale+ MPSOC 系列性能强悍无比,号称相比ZYNQ 7000系列每瓦性能提升5倍,一直想体验.近期因项目需要,入手了一套米尔的MPSoc开发 ...

  5. 正则 \num 如:\1, \2 匹配的结果

    \num 匹配 num,其中 num 是一个正整数.对所获取的匹配的引用.例如,'(.)\1' 匹配两个连续的相同字符. 例子: 正则:/(a)(b)\1/.此表达式的意思大概是对第一个()匹配结果的 ...

  6. 物料管理混乱怎么办?APS系统帮你实现高效运输

    APS系统可以高效地管理.控制分销中心并保证产品可订货.可盈利.能力可用.分销计划帮助企业分析原始信息,然后企业能够确定如何优化分销成本或者根据生产能力和成本提高客户服务水平. 今天成功的企业为了取得 ...

  7. Android 下拉列表Spinner 使用

    1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  8. 大数据集群环境 zookeeper集群环境安装

    大数据集群环境 zookeeper集群环境准备 zookeeper集群安装脚本,如果安装需要保持zookeeper保持相同目录,并且有可执行权限,需要准备如下 编写脚本: vi zkInstall.s ...

  9. Linux命令——whiptail交互式shell脚本对话框

    转自:交互式shell脚本对话框----whiptail指令 当你在linux环境下setup软件的时候就会有相应的对话框让你输入.虽然我们已经习惯了这种交互的方法,但是如果有一种直观的界面来输入是不 ...

  10. 使用kubeadm 新加入节点(原始token过期后)---转发

    kubeadm join kubeadm init 安装完成后你会得到以下的输出,使用join指令可以新增节点到集群,此token 有效期为24小时 You should now deploy a p ...