// Template generated by Clank
#include<bits/stdc++.h>
using namespace std;
#define st first
#define nd second
#define all(x) x.begin(), x.end()
#define BOOST cin.tie(NULL); ios_base::sync_with_stdio(false);
// #define int ll
typedef long long ll;
int32_t main(){
BOOST;
int n; cin >> n;
vector<int> nas(n);
int maxi = 0;
int maxi_idx = 0;
for(int i = 0; i < n; i++){
cin >> nas[i];
if(nas[i] >= maxi){
maxi = nas[i];
maxi_idx = i;
}
}
vector<int> tmpv;
for(int i = n - 1; i > maxi_idx; i--){
tmpv.push_back(nas.back());
nas.pop_back();
}
reverse(all(nas));
for(int i : tmpv){
nas.push_back(i);
}
reverse(all(nas));
// for(int i : nas){
// cout << i << " ";
// }
// cout << "\n";
nas.push_back(1e9);
vector<int> ans(n + 1, 0);
vector<int> mstack = {n};
int answer = 0;
for(int i = n - 1; i >= 0; i--){
while(nas[mstack.back()] <= nas[i]) mstack.pop_back();
ans[i] = ans[mstack.back()] + 1;
answer = max(answer, ans[i]);
mstack.push_back(i);
}
cout << answer << "\n";
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | // Template generated by Clank #include<bits/stdc++.h> using namespace std; #define st first #define nd second #define all(x) x.begin(), x.end() #define BOOST cin.tie(NULL); ios_base::sync_with_stdio(false); // #define int ll typedef long long ll; int32_t main(){ BOOST; int n; cin >> n; vector<int> nas(n); int maxi = 0; int maxi_idx = 0; for(int i = 0; i < n; i++){ cin >> nas[i]; if(nas[i] >= maxi){ maxi = nas[i]; maxi_idx = i; } } vector<int> tmpv; for(int i = n - 1; i > maxi_idx; i--){ tmpv.push_back(nas.back()); nas.pop_back(); } reverse(all(nas)); for(int i : tmpv){ nas.push_back(i); } reverse(all(nas)); // for(int i : nas){ // cout << i << " "; // } // cout << "\n"; nas.push_back(1e9); vector<int> ans(n + 1, 0); vector<int> mstack = {n}; int answer = 0; for(int i = n - 1; i >= 0; i--){ while(nas[mstack.back()] <= nas[i]) mstack.pop_back(); ans[i] = ans[mstack.back()] + 1; answer = max(answer, ans[i]); mstack.push_back(i); } cout << answer << "\n"; return 0; } |
English