给定 N� 个闭区间 [ai,bi][��,��],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。
输出选择的点的最小数量。
位于区间端点上的点也算作区间内。
输入格式
第一行包含整数 N�,表示区间数。
接下来 N� 行,每行包含两个整数 ai,bi��,��,表示一个区间的两个端点。
输出格式
输出一个整数,表示所需的点的最小数量。
数据范围
1≤N≤1051≤�≤105,
−109≤ai≤bi≤109−109≤��≤��≤109
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
int n;
struct dian
{
int l,r;
bool operator<(const dian &a)const//重载运算符
{
return r<a.r;
}
}a[N];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
}
sort(a,a+n);
int rn=a[0].r;
int ans=1;
for(int i=1;i<n;i++){
if(a[i].l>rn){
rn=a[i].r;
ans++;
}
}
cout<<ans<<endl;
}
其中:
重载运算符
bool operator>(const String &st1, const String &st2)
{
return (std::strcmp(st1.str, st2.str) > 0);
}
bool operator==(const String &st1, const String &st2)
{
return (std::strcmp(st1.str, st2.str) == 0);
}
sort()//从小到大排序
sort(a,a+10);
sort(a,a+10,less<int>());//从小到大
sort(a,a+10,greater<int>());//从大到小