AcWing 905. 区间选点
原题链接
简单
作者:
满目星河_0
,
2021-04-08 18:49:27
,
所有人可见
,
阅读 191
区间选点(超详细注释)
//算法思想:1.将各个区间按照右端点从小到大排序(用pair来实现,由于pair默认是按照first排序,输入的
//时候要逆序输入.这里的first代表右端点,second代表左端点。
//2.排序之后从小到大遍历各个区间,如果区间上没有点,则在区间的右端点上添加一个点;如果区间上有点,则
//pass,最后输出添加的点的个数
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
typedef pair<int,int> PII;
PII num[N];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int a,b;
scanf("%d%d",&a,&b);
num[i]={b,a};
//输入的pair顺序是<右端点,左端点>,方便下一步的排序。
}
sort(num,num+n);//按照右端点的大小进行排序
int ed=num[0].first; //初始化ed为第一个区间的右端点
int cnt=1;
for(int i=1;i<n;i++){
//如果ed的值大于等于下一个区间的左端点,直接判断下一个区间
if(ed>=num[i].second)
continue;
else{//否则更新ed的值并计数加一。
ed=num[i].first;
cnt++;
}
}
cout<<cnt;
return 0;
}