与第二篇题解类似,排序后尽量覆盖
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=50005;
struct node{
int l,r;
}line[maxn];
bool cmp(node a,node b){
if(a.l==b.l) return a.r<b.r;
return a.l<b.l;
}
int n,L,R;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&line[i].l,&line[i].r);
line[++n].l=line[n].r=1000001;
sort(line+1,line+n+1,cmp);
for(int i=1;i<=n;i++){
if(line[i].l<=R) R=max(R,line[i].r);
else
{
if(i!=1) printf("%d %d\n",L,R);
L=line[i].l;
R=line[i].r;
}
}
return 0;
}