贪心 线段重合
求最大重叠段长度
和最大间距
//#pragma GCC optimize(2)
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
typedef long long ll;
const int MAXN = 1e6 + 10;
ll ra = 0, rb = 0;
struct node
{
ll fst, lst;
}arr[MAXN];
bool cmp(node a, node b)
{
if(a.fst != b.fst)
return a.fst < b.fst;
return a.lst ;
}
int main()
{
//ios::sync_with_stdio(false);
//cin.tie(0); cout.tie(0);
int T;
cin>>T;
for(int i = 0; i < T; i++)
cin>>arr[i].fst>>arr[i].lst;
sort(arr, arr + T, cmp);
/*printf("\n");
for(int i = 0; i < T; i++)
cout<<arr[i].fst<<' '<<arr[i].lst<<endl;*/
ll linkfst = arr[0].fst, linklst = arr[0].lst;
ra = max(ra, linklst - linkfst);
for(int i = 1; i < T; i++)
{
if(arr[i].lst > linklst && arr[i].fst <= linklst)
{
linklst = arr[i].lst;
ra = max(ra, linklst - linkfst);
}
else if(arr[i].fst > linklst)
{
rb = max(rb, arr[i].fst - linklst);
linkfst = arr[i].fst, linklst = arr[i].lst;
ra = max(ra, linklst - linkfst);
}
}
//printf("\n");
cout<<ra<<' '<<rb<<endl;
return 0;
}