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;
}