#include <cstdio>
#include <algorithm>
using namespace std;
#define N 100000 + 5
#define INF 0x3f3f3f3f
int n, mnr = INF, ans, L[N], R[N], OrdL[N], Pmnr[N], Smnr[N];
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i ++)
{
scanf("%d%d", L + i, R + i);
OrdL[i] = i;
mnr = min(mnr, R[i]);
}
sort(OrdL + 1, OrdL + n + 1, [](int u, int v) {
return L[u] < L[v];
});
Pmnr[0] = Smnr[n + 1] = INF;
for (int i = 1; i <= n; i ++)
Pmnr[i] = min(Pmnr[i - 1], R[OrdL[i]]);
for (int i = n; i; i --)
Smnr[i] = min(Smnr[i + 1], R[OrdL[i]]);
for (int i = 1; i <= n; i ++)
{
int tmp = R[OrdL[i]] - L[OrdL[i]] + 1;
int mxl = i == n ? L[OrdL[n - 1]] : L[OrdL[n]];
int mnr = min(Pmnr[i - 1], Smnr[i + 1]);
tmp += max(0, mnr - mxl + 1);
ans = max(ans, tmp);
}
for (int i = 1; i < n && L[OrdL[i]] <= mnr; i ++)
{
int l = L[OrdL[n]], r = Smnr[i + 1];
int tmp = (mnr - L[OrdL[i]] + 1) + max(0, r - l + 1);
ans = max(ans, tmp);
}
printf("%d\n", ans);
return 0;
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:11:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &n);
^
./Main.cpp:14:30: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", L + i, R + i);
^