思路:
用单调递增栈,当该元素可以入栈的时候,栈顶元素就是它左侧第一个比它小的元素。
这道题我们只需要维护一个从栈底到栈顶单调递增的栈,每次不符合单调性就弹栈,最后输出栈顶即可。
#include<iostream>
using namespace std;
const int N=100010;
int stk[N],tt;
int main(){
int n;
cin>>n;
while(n--){
int x;
scanf("%d", &x);
while (tt && stk[tt] >= x) tt -- ;
if (tt==0) printf("-1 ");
else cout<<stk[tt]<<" ";
stk[++tt]=x;
}
}