单调栈

来源:互联网 发布:中国移动 健康大数据 编辑:程序博客网 时间:2024/06/06 19:30

解释

单调栈就是一个栈中的所有元素都依次递增(或递减),若入栈元素不符合,则不断出栈(根据题目记录下需要信息),直到它符合条件,并根据题意记录需要信息,最后让元素全部出栈并记录信息.

可以先向栈加入一个为0或为无限大的元素(据增减性而定),使当栈为其他元素时,任意元素都可以进栈,而省去了对栈顶是否为空的判断.
最后让所有元素出栈时,也可采用相同方法,加入一个极端元素来实现.
例题

代码

    for(i=1;i<=n+1;i++)    {        k=st.top().first;        while(a[i]<k)        {            ri[st.top().second]=i-1;            st.pop();            k=st.top().first;        }        if(a[i]==k)        le[i]=le[st.top().second];        else        le[i]=st.top().second+1;        tmp.first=a[i];        tmp.second=i;        st.push(tmp);    }
原创粉丝点击