单调栈:
题目
具体代码
#include<stdio.h>
int stk[100010],tt;
int main(){
int n;scanf("%d",&n);
for(int i = 0;i<n;i++){
int x;scanf("%d",&x);
while(tt && stk[tt] >= x) tt --;//栈内是递增的 如果栈顶元素大于当前待入栈元素,则出栈
if(tt) printf("%d ",stk[tt]);栈顶元素就是左侧第一个比它小的元素。
else printf("-1 ");如果栈空,则没有比该元素小的值。
stk[++ tt] = x;
}
return 0;
}