#include <iostream>
using namespace std;
int n,a[100005],st[100005][2],s,ans;
int main() {
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    
    for(int i=n;i>0;i--){
        int cnt=0;
        while(s>0&&a[i]>st[s-1][0]){
            cnt=max(cnt+1,st[--s][1]);
        }
        st[s][0]=a[i];
        st[s++][1]=cnt;
        ans=max(ans,cnt);
    }
    cout<<ans;
}

第3题【算法讲解053【必备】单调栈-下】 https://www.bilibili.com/video/BV1GH4y1D7TB/?share_source=copy_web&vd_source=5065fa61022691e8df35c771a30e6d29