ACM入门之单调栈
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM入门之单调栈相关的知识,希望对你有一定的参考价值。
何为单调栈,顾名思义,单调栈即满足单调性的栈结构。
单调栈解决的问题:
可以找到对于当前位置左边(或右边)最近的大于(或小于)它的值(或者下标)。
常用模板:
typedef long long int LL;
const int N=1e6+10;
LL h[N],lmax[N],rmax[N],n;
//lmax[i]左边最近的比它大的数的下标
//rmax[i]右边最近的比它大的数的下标
void init()
stack<int>st;
for(int i=1;i<=n;i++)
while(st.size()&&h[st.top()]<=h[i]) st.pop();
if(st.size()) lmax[i]=st.top();
st.push(i);
while(st.size()) st.pop();
for(int i=n;i>=1;i--)
while(st.size()&&h[st.top()]<=h[i]) st.pop();
if(st.size()) rmax[i]=st.top();
st.push(i);
找最近的比它小的数的模板,和上面的几乎一样,只不过比较符号取相反的就行了。
入门习题:
830. 单调栈
P1901 发射站
P1823 [COI2007] Patrik 音乐会的等待
131. 直方图中最大的矩形
以上是关于ACM入门之单调栈的主要内容,如果未能解决你的问题,请参考以下文章