核心思想: 贪心
每次只看当前的最优解
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 100010;
int n;
struct Range{
int l,r;
bool operator< (const Range &W)const{ //重载<
return r < W.r;
}
}range[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
int l,r;
cin>>l>>r;
range[i] = {l,r};
// cin >> range[i].l >> range[i].r; 也可以
}
sort(range,range+n);
int res = 0,ed = -2e9; //res为点个数 ed为当前选点的下标
for(int i=0;i<n;i++) //遍历所有区间
{
if(range[i].l > ed) //左端点大于上一次取的右端点
{
ed = range[i].r; //更新右端点
res ++; //个数+1
}
}
cout<<res;
}
?