单调栈

 

 

单调栈经常用来 找出每个数左边或者右边离它最近的比它大或者小的数

使用单调栈的做法是先将该数左边的数字存入一个栈中,当遍历到当前元素时,首先判断一下栈是否为空,(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;

}

posted @ 2023-03-09 18:30  chenxinyue  阅读(36)  评论(0)    收藏  举报