大雨吃小鱼 (单调栈)

测试链接:https://www.nowcoder.com/practice/77199defc4b74b24b8ebf6244e1793de

题解

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int stk[N][2];
int a[N];
int main()
{   
    int n;
    cin>>n;
    int r=0;
    int t=0;
    for(int i=0;i<n;i++)cin>>a[i];
    for(int i=n-1;i>=0;i--)
    {
        int curt=0;
        while(r>0&a[stk[r-1][0]]<a[i])
        {
            curt = max(curt+1,stk[--r][1]);
        }
        stk[r][0]=i;
        stk[r++][1]=curt;
        t = max(t,curt);
    }

    cout<<t<<endl;

    return 0;
}
posted @ 2025-07-08 14:23  屈臣  阅读(9)  评论(0)    收藏  举报