【问题描述】
在一个数轴上有n条线段,现要选取其中k条线段使得这k条线段两两没有重合部分,问最大的k为多少。
【输入格式】
输入文件segment.in的第1行为一个正整数n,下面n行每行2个数字ai,bi,描述每条线段。
【输出格式】
输出文件segment.out仅包括1个整数,为k的最大值
【样例输入】
3
0 2
2 4
1 3
【样例输出】
2
【数据范围】
对于20%的数据,n≤10;
对于50%的数据,n≤1000;
对于70%的数据,n≤100000;
对于100%的数据,n≤1000000,0≤ai<bi≤1000000。
代码
#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
struct point
{
int x,y;
};
point p[1000001];
bool cmp(point a,point b)
{
return a.y<b.y;
}
int main()
{
freopen("segment.in","r",stdin);
freopen("segment.out","w",stdout);
cin >> n;
int t=0;
for(int i=1;i<=n;i++) scanf("%d%d",&p[i].x,&p[i].y);
sort(p+1,p+1+n,cmp);
for(int i=1;i<=n;i++)
if(p[i].x>=t)
{
ans++;
t=p[i].y;
}
cout << ans<< endl;
return 0;
}