#include <bits/stdc++.h>
using namespace std;
const int MX=2000100;
int t,n,m,mx,a[MX],s[MX],dp[MX];
int main() {
scanf("%d",&n);
for (int i=0; i<n; i++) {
scanf("%d",&a[i]);
a[n+i]=a[i];
}
for (int i=2*n-1; i>=0; i--) {
for (; m>0 && a[s[m]]<=a[i]; --m);
dp[i]=m?dp[s[m]]+1:1;
if (i<=n) mx=max(mx,dp[i]);
s[++m]=i;
}
printf("%d\n",mx);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <bits/stdc++.h> using namespace std; const int MX=2000100; int t,n,m,mx,a[MX],s[MX],dp[MX]; int main() { scanf("%d",&n); for (int i=0; i<n; i++) { scanf("%d",&a[i]); a[n+i]=a[i]; } for (int i=2*n-1; i>=0; i--) { for (; m>0 && a[s[m]]<=a[i]; --m); dp[i]=m?dp[s[m]]+1:1; if (i<=n) mx=max(mx,dp[i]); s[++m]=i; } printf("%d\n",mx); return 0; } |
English