乐乐非常喜欢现在这份工作,因为公司只要求员工把每天的工作完成,不要求固定的上班时间。假如乐乐的同事有的从300时刻(以秒为单位),一直工作到3000时刻(我们认为从300时刻工作到3000时刻所工作的时间为3000-300=2700秒,即结束的那个时刻是没有工作的);有的从700时刻开始,在5200时刻结束;有的从6500时刻开始,到8100时刻结束。那么期间最长的至少有一个人在工作的连续时间是4900秒(从300时刻到5200时刻),而最长的无人工作的连续时间为1300时刻(从5200时刻到6500时刻)。
现在乐乐想知道从最早有人开始工作的时间至最后一个人离开的时间里,公司里最长至少有一人在工作的时间段和最长的无人工作的时间段。
输入格式
第一行一个整数n(1<=n<=5000);
接着有n行,每行有两个用空格分开的正整数Ai和Bi(0<=Ai、Bi<=1000000)。
输出格式
一行,两个整数,即题目所要求的两个答案。
输入/输出例子1
输入:
3 300 3000 700 5200 6500 8100
输出:
4900 1300
样例解释
无
#include<bits/stdc++.h>
using namespace std;
struct jb
{
int a,b;
}s[50005];
bool cmp(jb q1,jb q2)
{
return q1.a<q2.a||(q1.a==q2.a&&q1.b<q2.b);
}
long long n,l,a1,b1,maxx,maxx2,y;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%lld %lld",&s[i].a,&s[i].b);
}
sort(s+1,s+1+n,cmp);
a1=s[1].a;
b1=s[1].b;
for(int i=2;i<=n;i++)
{
if(s[i].a>b1)
{
y=s[i].a;
maxx=max(maxx,s[i].a-b1);
maxx2=max(maxx2,b1-a1);
//cout<<a1<<" "<<b1<<endl;
a1=s[i].a;
b1=s[i].b;
}
//else if(a1==s[i+1].a&&b1<s[i+1].b)
//{
// b1=s[i+1].b;
//}
else if(s[i].b>b1)
{
b1=s[i].b;
}
}
maxx=max(maxx,y-b1);
maxx2=max(maxx2,b1-a1);
cout<<maxx2<<" "<<maxx;
return 0;
}