贪心,记录前面末尾坐标最长的点
#include <iostream>
#include <algorithm>
#include <cstdio>
const int MAX = 5e4 + 5;
struct NODE
{
int st;
int ed;
}segment[MAX];
bool comp(NODE a, NODE b)
{
return a.st == b.st ? a.ed < b.ed : a.st < b.st;
}
int main()
{
std::ios::sync_with_stdio(false);
int num;
std::cin >> num;
for (int i = 1; i <= num; ++i)
{
std::cin >> segment[i].st >> segment[i].ed;
}
std::sort(segment + 1, segment + 1 + num, comp);
int res = 0;
segment[0].st = segment[0].ed = 0;
for (int i = 1; i <= num; ++i)
{
if (segment[i - 1].ed - segment[i].ed >= 0)
{
if (segment[i].ed - segment[i].st >= res)
{
res = segment[i].ed - segment[i].st;
}
segment[i].ed = segment[i - 1].ed;
}
else
{
if (segment[i - 1].ed - segment[i].st >= res)
{
res = segment[i - 1].ed - segment[i].st;
}
}
//std::cout << segment[i].ed << std::endl;
}
std::cout << res << std::endl;
return 0;
}