#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

京公网安备 11010502036488号