1、使用题型
给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。
2、思路
用单调递增栈,当该元素可以入栈的时候,栈顶元素就是它左侧第一个比它小的元素。 以:3 4 2 7 5 为例,过程如下:

3、代码实现
#include <iostream>
#include<stack>
using namespace std;
const int N = 1e6+10;
int a[N];
stack<int> st;
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
while(st.size()!=0 && st.top()>=a[i])//如果栈顶元素大于当前待入栈元素,则出栈
st.pop();
if(st.size()==0)//如果栈空,则没有比该元素小的值。
cout<<-1<<" ";
else
cout<<st.top()<<" ";//栈顶元素就是左侧第一个比它小的元素。
st.push(a[i]);
}
}