利用pair排序,即优先排左端点,左端点相同排右端点
比较下一个区间的左端点与当前区间的右端点,小于则可合并。
合并后根据新的右端点是否更大决定是否修改右端点
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
#define l first
#define r second
using namespace std;
const int N = 100010;
typedef pair<int, int> PII;
PII a[N];
int n;
int res=1;
int main()
{
cin>>n;
for (int i = 0; i < n; i ++ )
cin>>a[i].l>>a[i].r;
sort(a,a+n);
int last=a[0].r;
for (int i = 1; i < n; i ++ )
{
if(a[i].l<=last)
last=max(a[i].r,last);
else
{res++;
last=max(a[i].r,last);
}
}
cout<<res;
}