点击这里查看原题
因为每加入一天都要确保该天的r值大于等于已选中天的l的最大值,因此维护l值的递减队列。
/*
User:Small
Language:C++
Problem No.:2096
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
const int M=1e6+5;
int q[M],s,mn[M],mx[M],n,l,r,ans;
int main(){
freopen("data.in","r",stdin);//
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&mn[i],&mx[i]);
l=s=1;
for(int i=1;i<=n;i++){
while(l<=r&&mn[i]>mn[q[r]]) r--;
q[++r]=i;
while(mn[q[l]]>mx[i]){
s=q[l]+1;
while(q[l]<s) l++;
}
ans=max(ans,i-s+1);
}
printf("%d\n",ans);
return 0;
}