1.单调栈
#include <iostream>
using namespace std;
const int N = 100010;
int stk[N], tt;
int main()
{
int n;
cin >> 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 ");
//元素x入栈,每一个元素都需要入栈
stk[ ++ tt] = x;
}
return 0;
}