栈
先进后出;
基本操作:
#include<iostream>
using namespace std;
const int N=100010;
int stk[N],tt;
//插入
stk[++tt]=x;
//弹出
tt--;
//判断栈是否为空
if(tt>0) not empty
else empty;
//栈顶
stk[tt];
单调栈常见模型
找出每个数左边离它最近的比它大/小的数
int tt=0;
for(int i=1;i<=n;i++)
{
while(tt&&check(q[tt],i)) tt–;
stk[++tt]=i;
}
应用:单调栈
首先考虑暴力的求解方法,即用双指针来进行求解,最终把结果进行输出。用单调栈进行优化:用栈来存储已经遍历过的数。然后分析哪一些数永远不会作为答案进行输出,例如求取距离最小且小于的数,则存在逆序的话则第一点会被删掉。则最终栈中存放的就是单调的序列,是一个单调增的序列,当输入ai时,则在栈中找小于的数即可。
#include<iostream>
using namespace std;
const int N=100010