(白嫖怪丨(gun)开!)
介道题
十分的简单(bushi~)哈
first,定义亿下~
second,结构体and cmp 起飞~
最后蛤,重点来了:
排序之后,比较每一个区间的重合情况并用l(left)和r(right)记录目标区间的begin和end
l的起始值:第一个区间的开头
r的起始值:第一个区间的结尾
如果相邻的两个区间不重叠,那么,输出l和r(不换行的人就别看了)
否则,max(r,a[i].b),更新r的值
最后的最后,输出l和r
CODE实现如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct A{
int a,b;
}N[1000001];
bool cmp(A x,A y){
if(x.a!=y.a)return x.a<y.a;
return x.b>y.b;
}
int n;
signed main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>N[i].a>>N[i].b;
sort(N+1,N+n+1,cmp);
int l=N[1].a,r=N[1].b;
for(int i=2;i<=n;i++){
if(N[i].a<=r)r=max(r,N[i].b);
else{
cout<<l<<" "<<r<<endl;
l=N[i].a,r=N[i].b;
}
}
cout<<l<<" "<<r;
return 0;
}
杜绝复制!
(cookiebus的源代码透析专题)