#pragma GCC optimize("O3,unroll-loops,inline")
#include "bits/stdc++.h"
using namespace std;
#define rep(i,a,b) for(int i=(a); i<(b); ++i)
#define all(x) x.begin(),x.end()
#define sz(x) int(x.size())
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<vi> vvi;
const int mxN = 1e6+7;
int a[mxN*2];
int nxt[mxN*2];
int dp[mxN*2];
int main(){
cin.tie(NULL),ios::sync_with_stdio(false);
int n; cin >> n;
rep(i,0,n) cin >> a[i];
rep(i,0,n) a[i+n] = a[i];
a[n*2] = 1e9+7;
nxt[n*2] = n*2;
for(int i = n*2-1; i>=0; --i){
nxt[i] = i+1;
while(a[nxt[i]] <= a[i]) nxt[i] = nxt[nxt[i]];
}
int ans = 0;
dp[n*2] = 0;
for(int i = n*2-1; i >= 0; --i){
dp[i] = 1 + dp[nxt[i]];
ans = max(ans, dp[i]);
}
cout << ans << '\n';
}
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #pragma GCC optimize("O3,unroll-loops,inline") #include "bits/stdc++.h" using namespace std; #define rep(i,a,b) for(int i=(a); i<(b); ++i) #define all(x) x.begin(),x.end() #define sz(x) int(x.size()) typedef long long ll; typedef unsigned long long ull; typedef vector<int> vi; typedef vector<vi> vvi; const int mxN = 1e6+7; int a[mxN*2]; int nxt[mxN*2]; int dp[mxN*2]; int main(){ cin.tie(NULL),ios::sync_with_stdio(false); int n; cin >> n; rep(i,0,n) cin >> a[i]; rep(i,0,n) a[i+n] = a[i]; a[n*2] = 1e9+7; nxt[n*2] = n*2; for(int i = n*2-1; i>=0; --i){ nxt[i] = i+1; while(a[nxt[i]] <= a[i]) nxt[i] = nxt[nxt[i]]; } int ans = 0; dp[n*2] = 0; for(int i = n*2-1; i >= 0; --i){ dp[i] = 1 + dp[nxt[i]]; ans = max(ans, dp[i]); } cout << ans << '\n'; } |
English