题目描述:
一辆自动驾驶大巴接到任务前往机场站厅层接乘客,由于机场存在多个出站口,因此乘客在站厅层的活动范围也不同。乘客在站厅层的活动区域用Filed表示,其中第i个乘客的活动范围Field[i]=[Fstart,Fend]表示乘客在站厅层的到区间活动,若接乘的车辆在该乘客的活动区间停车,即Fstart<=F<=Fend时可以接到该乘客。由于机场的交通管制以及复杂的接乘路况,自动驾驶巴士被要求用最少的停车次数来接到所有的乘客,请算出自动驾驶巴士接完所有乘客需要的最少停车数。
输入描述:
输入由每位乘客的活动区间组成,乘客的活动区间表示为[Fstart,Fend]。例如,Field=[[F1s,F1e],[F2s,F2e]…,[Fns,Fne]]表示共n位乘客需要接送,第1位乘客的活动区间为[F1s,F1e],F1s<=F1e
输出描述:
输出为1个整形数,代表接到所有乘客所需的最少停车次数。
样例输入:
7 13 4 10 2 5 8 10
样例输出:
2
提示:
1
<
=
F
i
e
l
d
.
L
e
n
g
t
h
<
=
1
0
5
1<=Field.Length<=10^5
1<=Field.Length<=105
−
2
31
<
=
F
s
t
a
r
t
<
F
e
n
d
<
=
2
31
−
1
-2^{31}<=Fstart<Fend<=2^{31}-1
−231<=Fstart<Fend<=231−1
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100010;
int n;
struct Range{
long long l,r;
bool operator < (const Range &W)const
{
return r<W.r;
}
}range[N];
int main()
{
int n = 0;
while(~scanf("%lld %lld",&range[n].l,&range[n].r))
{
n ++ ;
}
sort(range,range+n);
int res=0;
long long ed=-2e31-2;
for(int i=0;i<n;i++)
if(range[i].l>ed)
{
res++;
ed=range[i].r;
}
printf("%d\n",res);
return 0;
}