单调栈 题解123456789101112给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。输入格式第一行包含整数 N,表示数列长度。第二行包含 N 个整数,表示整数数列。输出格式共一行,包含 N 个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 −1。数据范围1≤N≤1051≤数列中元素≤1091234567891011121314151617181920212223242526#include <iostream>using namespace std;const int N = 1e5 + 10;int n;int stk[N], tt;int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i = 0; i < n; i++){ int x; cin>>x; while(tt && stk[tt] >= x)tt--; if(tt) cout<<stk[tt]<<" "; else cout<<-1<<" "; stk[++tt] = x; } return 0;}