单调队列
不难发现[x,y]满足题意,当且仅当这段区间Li的最大值小于等于Ry并且[x,y-1]合法,然后维护左端点单调不降
代码
//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=1005000;
int n,f[M];
int tp,ta,l[M],r[M],q[M];
int main()
{
scanf("%d",&n);int ans=0;
for (int i=1;i<=n;i++) scanf("%d%d",&l[i],&r[i]);
f[0]=tp=1;ta=0;
for (int i=1;i<=n;i++)
{
while (ta>=tp&&l[q[ta]]<=l[i]) ta--;
q[++ta]=i;f[i]=f[i-1];
while (l[q[tp]]>r[i]) f[i]=q[tp++]+1;
}
for (int i=1;i<=n;i++) ans=max(ans,i-f[i]+1);
cout<<ans;
return 0;
}