这个题,题目很长,然而亲爱的翻译已经帮你读完题了,一句话题意。
要求不下降的最长,那么这一段肯定满足队首的左区间不大于队尾的右区间,单调队列容易求解。
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define re register #define wc 0.0000000001 using namespace std; int q[1000001],a[1000001],b[1000001],n,m,ans; int main() { cin>>n; for(re int i=1;i<=n;i++) cin>>a[i]>>b[i]; int h=1,t=0; for(re int i=1;i<=n;i++) { while(h<=t&&a[q[h]]>b[i]) h++; while(h<=t&&a[q[t]]<=a[i]) t--; q[++t]=i; ans=max(ans,i-q[h-1]); } cout<<ans; }