【题解-Acwing】4173. 线段

题目: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;
}

结果