Description
A restaurant received n orders for the rental. Each rental order reserve the restaurant for a continuous period of time, the i-th order is characterized by two time values — the start time li and the finish time ri (li ≤ ri).
Restaurant management can accept and reject orders. What is the maximal number of orders the restaurant can accept?
No two accepted orders can intersect, i.e. they can't share even a moment of time. If one order ends in the moment other starts, they can't be accepted both.
Input
The first line contains integer number n (1 ≤ n ≤ 5·105) — number of orders. The following n lines contain integer values li and rieach (1 ≤ li ≤ ri ≤ 109).
Output
Print the maximal number of orders that can be accepted.
Sample Input
Input
2 7 11 4 7
Output
1
Input
5 1 2 2 3 3 4 4 5 5 6
Output
3
Input
6 4 8 1 5 4 7 2 5 1 3 6 8
Output
2
AC代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node
{
__int64 u;
__int64 v;
} a[1100002];
bool cmp(node A,node B)
{
return A.v <B.v ;
}
int main()
{
__int64 n,i;
while(scanf("%I64d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%I64d%I64d",&a[i].u ,&a[i].v );
}
sort(a,a+n,cmp);
__int64 sum=1;
__int64 temp=a[0].v;
for(i=1;i<n;i++)
{
if(a[i].u>temp)
{
temp=a[i].v;
sum++;
}
}
printf("%I64d\n",sum);
}
return 0;
}