给定 n个区间 [li,ri],要求合并所有有交集的区间。
注意如果在端点处相交,也算有交集。
输出合并完成后的区间个数。
例如:[1,3]和[2,6]可以合并为一个区间[1,6]。
输入样例:
5
1 2
2 4
5 6
7 8
7 9
输出样例:
3
#include<iostream>
#include<algorithm>
using namespace std;
const int N=10000010;
int a[N],b[N];
void quick_sort(int l,int r){
if(l>=r)
return;
int i=l-1,j=r+1,x=a[l];
while(i<j){
do i++;while(a[i]<x);
do j--;while(a[j]>x);
if(i<j){
swap(a[i], a[j]);
swap(b[i], b[j]);
}
}
quick_sort(l, j);
quick_sort(j + 1, r);
}
int main(){
int n;
cin >> n;
for (int i = 0; i < n;i++){
cin >> a[i], cin >> b[i];
}
quick_sort(0,n-1);
int start = a[0], end = b[0], ans = 1;
for (int i = 1; i < n; i++)
{
//case 1:当前区间包含后一个区间,无需操作
if(a[i]<=end&&b[i]>=end){
end = b[i];
}//case 2
else if(a[i]>=end){
end = b[i];
start = a[i];
ans++;
}//case 3
}
cout << ans;
return 0;
}