Aizu - 1386 - Starting a Scenic Railroad Service(思路)

Jim, working for a railroad company, is responsible for planning a new tourist train service. He is sure that the train route along a scenic valley will arise a big boom, but not quite sure how big the boom will be.

A market survey was ordered and Jim has just received an estimated list of passengers' travel sections. Based on the list, he'd like to estimate the minimum number of train seats that meets the demand.

Providing as many seats as all of the passengers may cost unreasonably high. Assigning the same seat to more than one passenger without overlapping travel sections may lead to a great cost cutback.

Two different policies are considered on seat assignments. As the views from the train windows depend on the seat positions, it would be better if passengers can choose a seat. One possible policy (named `policy-1') is to allow the passengers to choose an arbitrary seat among all the remaining seats when they make their reservations. As the order of reservations is unknown, all the possible orders must be considered on counting the required number of seats.

The other policy (named `policy-2') does not allow the passengers to choose their seats; the seat assignments are decided by the railroad operator, not by the passengers, after all the reservations are completed. This policy may reduce the number of the required seats considerably.

Your task is to let Jim know how dierent these two policies are by providing him a program that computes the numbers of seats required under the two seat reservation policies. Let us consider a case where there are four stations, S1, S2, S3, and S4, and four expected passengers p1p1, p2p2, p3p3, and p4p4 with the travel list below.

passengerfromto
p1p1S1S2
p2p2S2S3
p3p3S1S3
p4p4S3S4

 

The travel sections of p1p1 and p2p2 do not overlap, that of p3p3 overlaps those of p1p1 and p2p2, and that of p4p4 does not overlap those of any others.

Let's check if two seats would suffice under the policy-1. If p1p1 books a seat first, either of the two seats can be chosen. If p2p2 books second, as the travel section does not overlap that of p1p1, the same seat can be booked, but the other seat may look more attractive to p2p2. If p2p2 reserves a seat different from that of p1p1, there will remain no available seats for p3p3 between S1 and S3 (Figure I.1).

Figure I.1. With two seats

With three seats, p3p3 can find a seat with any seat reservation combinations by p1p1and p2p2. p4p4 can also book a seat for there are no other passengers between S3 and S4 (Figure I.2).

Figure I.2. With three seats

For this travel list, only three seats suffice considering all the possible reservation orders and seat preferences under the policy-1.

On the other hand, deciding the seat assignments after all the reservations are completed enables a tight assignment with only two seats under the policy-2 (Figure I.3).

Figure I.3. Tight assignment to two seats

Input

The input consists of a single test case of the following format.

nn
a1a1 b1b1
...
anan bnbn

Here, the first line has an integer nn, the number of the passengers in the estimated list of passengers' travel sections (1≤n≤2000001≤n≤200000). The stations are numbered starting from 1 in their order along the route. Each of the following nn lines describes the travel for each passenger by two integers, the boarding and the alighting station numbers, aiai and bibi, respectively (1≤ai<bi≤1000001≤ai<bi≤100000). Note that more than one passenger in the list may have the same boarding and alighting stations.

Output

Two integers s1s1 and s2s2 should be output in a line in this order, separated by a space. s1s1 and s2s2 are the numbers of seats required under the policy-1 and -2, respectively.

Sample Input 1

4
1 3
1 3
3 6
3 6

Sample Output 1

2 2

Sample Input 2

4
1 2
2 3
1 3
3 4

Sample Output 2

3 2

Sample Input 3

10
84 302
275 327
364 538
26 364
29 386
545 955
715 965
404 415
903 942
150 402

Sample Output 3

6 5

题意:

n个人,ai上车,bi下车,两种预定方案:1:随便订,但是要选之前没订购过的。2:最优策略,选完位置再安排座位。

问两种方案需要的座位各多少。

思路:

对于第一种,答案是人数最多的区间的人数,因为只要区间有重叠,选票可能会冲突,把最大的冲突给安排了不就行了吗。

对于第二种,只要知道最多同时有多少人在车上就行了。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
int ans1,ans2,a[maxn],b[maxn],r[maxn],MAX;
int sc[maxn];
int xc[maxn];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i]>>b[i];
        sc[a[i]]++;//a[i]上车人数
        xc[b[i]]++;//b[i]下车人数
        r[a[i]]++;
        r[b[i]]--;//站点[的人数
        MAX = max(MAX, b[i]);//最远站
    }
    for(int i = 1;i<= MAX;i++)
    {
        sc[i]+= sc[i-1];
        xc[i]+= xc[i-1];
    }
    for(int i=1; i<=n;i++)
        ans1=max(ans1,sc[b[i]-1]-xc[a[i]]);//精华所在啊,求的是在该区间的总人数
    for(int i=1;i<=MAX;i++)
    {
        r[i]+=r[i-1];
        ans2 = max(ans2,r[i]);
    }
    cout<<ans1<<' '<<ans2<<endl;

    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值