题目来源: loj
题目描述
数轴上有 n 条线段,选取其中 k 条线段使得这 k 条线段两两没有重合部分,问 k 最大为多少。
输入格式
第一行为一个正整数 n;
在接下来的 n 行中,每行有 2 个数 ai,bi,描述每条线段。
输出格式
输出一个整数,为 k 的最大值。
样例输入
3
0 2
2 4
1 3
样例输出
2
思路
和活动安排是一样的,按照每条线段尾端来从小到大排序
code
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,anss;
struct node{
int st,ed;
}a[N];
void init()
{
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d%d",&a[i].st,&a[i].ed);
}
int cmp(node x,node y) { return x.ed<y.ed; }
void work()
{
int ed=0;
sort(a+1,a+1+n,cmp);
for (int i=1;i<=n;i++)
if (a[i].st>=ed) ed=a[i].ed,anss++;
}
int main()
{
init();
work();
cout<<anss<<endl;
return 0;
}