- 单调递增栈:在保持栈内元素单调递增的前提下(如果栈顶元素大于要入栈的元素,将将其弹出),将新元素入栈
#include <iostream>
using namespace std;
int stk[N], tt;
int main()
{
int n;
cin >> n;
while (n -- )
{
int x;
scanf ("%d", &x);
// 1. 栈顶元素存在 && 栈顶元素>= 当前元素,出栈--出栈到栈顶元素<=当前元素
while ( tt && stk[tt] >= x ) tt --;
// 2. 如果栈空,则没有比该元素小的值
if (!tt) printf("-1");
// 3. 否则, 栈顶元素就是左侧第一个比他小的元素
else printf("%d", skt[tt]);
// 4. 无论怎样当前元素都会入栈
skt[ ++ tt] = x;
}
return 0;
} ```