题目链接
https://www.acwing.com/problem/content/907/
思路
我们用pair<int,int> 来存储每一个区间的两个端点,然后按照右区间从小到大排序,然后每次贪心地将点放在区间的最右边,那么判断是否在下一个区间只需要判断是否大于或等于下一个区间的左区间即可,如果小于的话说明需要在下一个区间放置新点,我们将ans++ ,并将当前最新放的点的位置更新
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
#define PII pair<int,int>
vector<PII> V;
int n;
int main()
{
cin>>n;
int u,v;
for(int i = 1;i <= n; ++i) {
cin>>u>>v;
V.push_back({v,u});
}
sort(V.begin(),V.end());
int loc = V[0].first;
int ans = 1;
for(int i = 1;i < n; ++i) {
if(loc >= V[i].second) continue;
ans++;loc = V[i].first;
}
cout<<ans<<endl;
return 0;
}
|