#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