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入门之单调栈的主要内容,如果未能解决你的问题,请参考以下文章

ACM入门之单调队列

单调栈典型例题

单调队列/单调栈入门详解+题目推荐

hdu - 5033 - Building(单调栈)

音乐会的等待-单调栈

刷题单调栈音乐会的等待