【题目描述】
给定 nn 个闭区间 [ai,biai,bi],其中i=1,2,...,ni=1,2,...,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1,21,2] 和 [2,32,3] 可以合并为 [1,31,3],[1,31,3] 和 [2,42,4] 可以合并为 [1,41,4],但是[1,21,2] 和 [3,43,4] 不可以合并。
我们的任务是判断这些区间是否可以最终合并为一个闭区间,如果可以,将这个闭区间输出,否则输出nono。
【输入】
第一行为一个整数nn,3≤n≤500003≤n≤50000。表示输入区间的数量。
之后nn行,在第ii行上(1≤i≤n1≤i≤n),为两个整数 aiai 和 bibi ,整数之间用一个空格分隔,表示区间 [ai,biai,bi](其中 1≤ai≤bi≤100001≤ai≤bi≤10000)。
【输出】
输出一行,如果这些区间最终可以合并为一个闭区间,输出这个闭区间的左右边界,用单个空格隔开;否则输出 nono。
【输入样例】
5 5 6 1 5 10 10 6 9 8 10
【输出样例】
1 10
#include <bits/stdc++.h>
using namespace std;
struct Node
{
int start,end;
};
Node a[50001];
bool cmp(Node a,Node b)
{
if(a.start!=b.start)
return a.start<b.start;
else
return a.end<b.end;
}
int main()
{
int n,start,end;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i].start>>a[i].end;
sort(a+1,a+n+1,cmp);
start=a[1].start;
end=a[1].end;
for(int i=2;i<=n;i++)
{
if(end>=a[i].start)
end=max(end,a[i].end);
else
{
cout<<"no";
return 0;
}
}
cout<<start<<" "<<end<<endl;
return 0;
}