bzoj1651:专用牛棚

1651: [Usaco2006 Feb]Stall Reservations 专用牛棚

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 638  Solved: 359
[Submit][Status][Discuss]

Description

Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will only be milked over some precise time interval A..B (1 <= A <= B <= 1,000,000), which includes both times A and B. Obviously, FJ must create a reservation system to determine which stall each cow can be assigned for her milking time. Of course, no cow will share such a private moment with other cows. Help FJ by determining: * The minimum number of stalls required in the barn so that each cow can have her private milking period * An assignment of cows to these stalls over time

有N头牛,每头牛有个喝水时间,这段时间它将专用一个Stall 现在给出每头牛的喝水时间段,问至少要多少个Stall才能满足它们的要求

Input

* Line 1: A single integer, N

* Lines 2..N+1: Line i+1 describes cow i‘s milking interval with two space-separated integers.

Output

* Line 1: The minimum number of stalls the barn must have.

* Lines 2..N+1: Line i+1 describes the stall to which cow i will be assigned for her milking period.

Sample Input

5
1 10
2 4
3 6
5 8
4 7

Sample Output

4

OUTPUT DETAILS:

Here‘s a graphical schedule for this output:

Time 1 2 3 4 5 6 7 8 9 10
Stall 1 c1>>>>>>>>>>>>>>>>>>>>>>>>>>>
Stall 2 .. c2>>>>>> c4>>>>>>>>> .. ..
Stall 3 .. .. c3>>>>>>>>> .. .. .. ..
Stall 4 .. .. .. c5>>>>>>>>> .. .. ..

Other outputs using the same number of stalls are possible.

HINT

不妨试下这个数据,对于按结束点SORT,再GREEDY的做法 1 3 5 7 6 9 10 11 8 12 4 13 正确的输出应该是3

Source

Silver

其实就是算每一个时间点有多少只牛在喝水。。求最大的那个就是需要几个水龙头了,上数学课突然就想出来了。。。

所以就容易了。

--------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<deque>
using namespace std;
int a[1000005];
int main(){
 int n;
 int nmax=-1;
 scanf("%d",&n);
 for(int i=1,o,e;i<=n;i++){
  scanf("%d%d",&o,&e);
     a[o]++;a[e+1]--;
     nmax=max(nmax,e);
 }
 int tmp=0;int ans=-1;
 for(int i=1;i<=nmax;i++){
  tmp+=a[i];
  if(tmp>ans)
    ans=tmp;
 }
 printf("%d\n",ans);
 return 0;
}

----------------------------------------------------------------------------------

时间: 2024-10-27 05:21:24

bzoj1651:专用牛棚的相关文章

bzoj1651[Usaco2006 Feb]Stall Reservations 专用牛棚*

bzoj1651[Usaco2006 Feb]Stall Reservations 专用牛棚 题意: 有N头牛,每头牛有个喝水时间段,这段时间它将专用一个棚.现在给出每头牛的喝水时间段,问至少要多少个棚才能满足它们的要求.n≤50000,时刻≤1000000. 题解: 时间段左端点对应的sum元素++,右端点+1对应的sum元素--,最后从左到右加一遍就可以得到每个时刻的喝水牛数,找个最大值就可以了. 代码: 1 #include <cstdio> 2 #include <cstring

BZOJ 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚( 线段树 )

线段树.. -------------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #define rep( i , n ) for( int i = 0 ; i < n ; i++ ) #define c

BZOJ 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚

题目 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 553  Solved: 307[Submit][Status] Description Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will only be milked over some preci

bzoj 1651: [Usaco2006 Feb]Stall Reservations 专用牛棚【贪心+堆||差分】

这个题方法还挺多的,不过洛谷上要输出方案所以用堆最方便 先按起始时间从小到大排序. 我用的是greater重定义优先队列(小根堆).用pair存牛棚用完时间(first)和牛棚编号(second),每次查看队首的first是否比当前牛的起始时间早,是则弹出队首记录当前牛的答案,再把新的pair放进去,否则增加牛棚,同样要塞进队里 #include<iostream> #include<cstdio> #include<algorithm> #include<que

【差分】BZOJ 1651 [Usaco2006 Feb]Stall Reservations 专用牛棚

显而易见的是我们要求的时间段重叠最多的次数. 用线段树也可以,不过既然是学习和练习前缀和与差分那么就用差分的思想. 在num[a]的位置+1 在num[y+1]位置-1 表示[a,b]区间有一个时间段. 最后统计一下num[i]最多的次数(i是1~n) /************************************************************** Problem: 1651 User: LYFer Language: C++ Result: Accepted Ti

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

9月刷题总结

全是usaco水题.... 贪心(这个要放在首位,思想太重要): [BZOJ]1650: [Usaco2006 Dec]River Hopscotch 跳石子(二分+贪心) [BZOJ]1691: [Usaco2007 Dec]挑剔的美食家(multiset+贪心) [BZOJ]1692 & 1640: [Usaco2007 Dec]队列变换(后缀数组+贪心) [BZOJ]1620: [Usaco2008 Nov]Time Management 时间管理(贪心) [BZOJ]1634: [Usa

小结:特殊的技巧

对于这些题我只能说,太神了orz 中位数:中位数有个很好的性质,即在直线上所有的点到这些点的中位数的距离和是最小的.例题很多:[vijos]1882 石阶上的砖(中位数+特殊的技巧) 差分:差分是个好东西..能够进行一些区间操作orz.即我们可以将线段拆成点,权值为1(左端点)-1(右端点),那么离散端点后从左向右扫,根据所需要的维护信息,例如:[BZOJ]1637: [Usaco2007 Mar]Balanced Lineup(前缀和+差分+特殊的技巧),[BZOJ]1676: [Usaco2

CFT 1.3 PE IBM 服务器系统专用的PE工具

分享一个IBM 服务器专用的PE工具,此工具方便简洁,可用于IBM 企业级服务器系统备份还原. 有了CFT 1.3 PE  再也不愁服务器系统崩溃了..哈哈 简介: 1.CFT 是一个基于win7内核的WinPE : 2.CFT 已经添加了很多IBM的阵列卡驱动,所以直接启动就能认到很多服务器的硬盘: 3.如果木有认到你的服务器的硬盘,你可以: a.准备服务器阵列卡的win2008 32位驱动. b.在设备管理器里手工更新阵列卡驱动,或者试试桌面的工具:给PE加驱动1和给PE加驱动2. 4.忘了