题目:4173. 线段
题目描述
数轴上有 n 条线段,选取其中 k 条线段使得这 k 条线段两两没有重合部分,问 k 最大为多少。
输入格式
第一行为一个正整数 n;
在接下来的 n 行中,每行有 2 个数 a i , b i a_i,b_i ai,bi,描述每条线段的左右端点坐标。
输出格式
输出一个整数,为 k 的最大值。
数据范围
1 ≤ n ≤ 10 6 , 1≤n≤10^6, 1≤n≤106,
0 ≤ a i < b i ≤ 10 6 。 0≤a_i<b_i≤10^6。 0≤ai<bi≤106。
输入样例
3
0 2
2 4
1 3
输出样例
2
代码
cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,ed=-1,sum;
struct range{
int a,b;
}r[N];
bool cmp(range x,range y){
return x.b<y.b;
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d %d",&r[i].a,&r[i].b);
sort(r,r+n,cmp);
for(int i=0;i<n;i++){
if(r[i].a>=ed){
sum++;
ed=r[i].b;
}
}
printf("%d",sum);
return 0;
}
结果
