线段(segment)

【问题描述】
在一个数轴上有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;
}
posted @ 2020-08-06 16:09  牛大了的牛大  阅读(357)  评论(0编辑  收藏  举报