#include<bits/stdc++.h>
using namespace std;
constexpr int N=1e6+5;
#define gc getchar_unlocked
inline int read(){
int x=0; char c=gc();
while(!isdigit(c))c=gc();
while(isdigit(c))x=x*10+c-'0',c=gc();
return x;
}
int n,a[N],q[N],l,r,ans;
int main(){
n=read();
for(int i=1;i<=n;i++)a[i]=read();
for(int i=1;i<=n;i++)if(a[i]>a[q[r]])q[++r]=i;
reverse(q+1,q+1+r),ans=r;
for(int i=n;i>=1;i--){
if(q[l+1]==i)l++;
while(l<r&&a[q[r]]<=a[i])r--;
q[++r]=i,ans=max(ans,r-l);
}
printf("%d\n",ans);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include<bits/stdc++.h> using namespace std; constexpr int N=1e6+5; #define gc getchar_unlocked inline int read(){ int x=0; char c=gc(); while(!isdigit(c))c=gc(); while(isdigit(c))x=x*10+c-'0',c=gc(); return x; } int n,a[N],q[N],l,r,ans; int main(){ n=read(); for(int i=1;i<=n;i++)a[i]=read(); for(int i=1;i<=n;i++)if(a[i]>a[q[r]])q[++r]=i; reverse(q+1,q+1+r),ans=r; for(int i=n;i>=1;i--){ if(q[l+1]==i)l++; while(l<r&&a[q[r]]<=a[i])r--; q[++r]=i,ans=max(ans,r-l); } printf("%d\n",ans); return 0; } |
English