合并区间-给定 n个区间 [li,ri],要求合并所有有交集的区间。 注意如果在端点处相交,也算有交集。 输出合并完成后的区间个数。 例如:[1,3]和[2,6]可以合并为一个区间[1,6]。

给定 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;
}

猜你喜欢

转载自blog.csdn.net/weixin_46443659/article/details/113757250