单调栈

单调栈经常用来 找出每个数左边或者右边离它最近的比它大或者小的数
使用单调栈的做法是先将该数左边的数字存入一个栈中,当遍历到当前元素时,首先判断一下栈是否为空,(while)如果栈不为空,就判断一下当前栈顶元素和该数的大小,只要当前的栈顶元素比该数大,就弹出栈顶元素,直到栈为空或者找到一个比当前这个数小的栈顶元素为止。再判断栈是否为空。如果栈为空说明该数左边没有比其小的数,此时输出-1;如果栈不为空,直接输出栈顶元素即可。最后要将栈顶元素入栈,因为可能是题目要求的左边第一个比它小的数。(参考csdn博主晴空)
栈的快速使用:先引入头文件#include<stack>,栈顶元素stack.top(),弹出元素stack.pop(),入栈元素stack.push(x),判断栈是否为空stack.size().
#include<iostream>
#include<stack>
const int N=1e5+10;
stack<int> stk;
using namespace std;
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
while(stk.size() && stk.top()>=x) stk.pop();
if(stk.size()==0){
cout<<"-1"<<" ";
}else
cout<<stk.top()<<" ";
stk.push(x);
}
return 0;
}

浙公网安备 33010602011771号