问题背景
「一本通1.1 练习3」
题目描述
数轴上有 n 条线段,选取其中 k 条线段使得这 k 条线段两两没有重合部分,问 k 最大为多少。
输入格式
第一行为一个正整数 n;
在接下来的 n 行中,每行有 2 个数 ai,bi,描述每条线段。
输出格式
输出一个整数,为 k 的最大值。
样例输入1
3
0 2
2 4
1 3
样例输出1
2
注释说明
提示:使用读优化,否则超时!!!
对于20%的数据,n≤10;
对于50%的数据,n≤10^3;
对于70%的数据,n≤10^5;
对于100%的数据,n≤10^6,0≤ai<bi≤10^6。
#include<bits/stdc++.h>
using namespace std;
int x,n,ans;
struct ed{
int l,r;
}a[1000005];
bool cmp(ed x,ed y){
return x.r<y.r;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i].l,&a[i].r);
}
sort(a+1,a+1+n,cmp);
x=a[1].r;
ans=1;
for(int i=2;i<=n;i++){
if(a[i].l>=x){
x=a[i].r;
ans++;
}
}
cout<<ans;
}
标签:10,1.1,ai,ed,线段,ans
From: https://blog.csdn.net/no_play_no_games/article/details/141333106