问题标题: 酷町堂:4217 合并区间

0
0
已解决
曹润持
曹润持
高级守护
高级守护

4217   合并区间

经验值:1200 时间限制:1000毫秒 内存限制:128MB

题目描述 Description

给出一个区间的集合,请合并所有重叠的区间。

输入描述 Input Description

第一行,一个整数n
接下来n行, 每行两个整数,x y,表示一个区间(x, y)

输出描述 Output Description

合并之后的所有区间,每行一个。按左端点从小到大排序

样例输入 Sample Input

4 1 3 2 6 8 10 15 18

样例输出 Sample Output

1 6 8 10 15 18

数据范围及提示 Data Size & Hint

10≤n≤1000,对于每行输入的x、y,0<x<=y<2000

求求告诉思路(有代码最好)

#include <bits/stdc++.h>
using namespace std;
struct node{
	int l,r;
}a[1005];
bool cmp(node x,node y){
	return x.l<y.l;
}
int n,r1,l1;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].l>>a[i].r;
	}
	sort(a+1,a+n+1,cmp);
	l1=a[1].l;
	r1=a[1].r;
	for(int i=1;i<n;i++){
        //cout<<a[i].l<<' '<<a[i].r<<'\n';
		if(a[i].r>=a[i+1].l){
			r1=a[i+1].r;
		}else{
            cout<<l1<<' '<<r1<<'\n';
            l1=a[i+1].l;
            r1=a[i+1].r;
        }
	}
    cout<<l1<<' '<<r1;
	return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
struct qj{
    int l,r;
}a[1005];
bool cmp(qj a,qj b){
    if(a.l!=b.l)return a.l<b.l;
    return a.r<b.r;
}
int cnt=1,n;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].l>>a[i].r;
    }
    sort(a+1,a+n+1,cmp);
    int r=a[1].r;
    int l=a[1].l;
    for(int i=2;i<=n;i++){
        //if(a[i].l>r) cout<<l<<' '<<r<<'\n';
        cout<<l<<' '<<r<<'\n';
        l=max(l,a[i].l);
        r=max(r,a[i].r);
    }
    //cout<<cnt;
    return 0;
}

 

曹润持在2022-08-08 15:17:32追加了内容

在线等,急

曹润持在2022-08-08 15:44:23追加了内容

ding~~~~~~~~~~~

曹润持在2022-08-08 19:00:56追加了内容

求解!!!!!!


0
0
我要回答