poj3190

maksyuki 发表于 oj 分类,标签: ,
0

Stall Reservations

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

Many answers are correct for each test dataset; a program will grade your answer.

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

1

2

3

2

4

Hint

Explanation of the sample:

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.

Source

USACO 2006 February Silver

 

题目类型:贪心+优先队列

算法分析:为了使得stall数最少,需要将能够串行先后执行的时间区间合并在一个stall中执行。首先将区间按照左端点递增排序,然后依次比较区间的左端点和前面设置好的stall的“容量”的最小值。若区间左端点相比较小,则表示存在一个时间段是重合的,需要再开一个stall,否则更新此时stall的“容量”,类似于向若干个背包分发物品。这里使用优先队列来动态维护最小值。注意比较条件一定是大于!!!注意最后输出是按照输入顺序的区间来输出!!!