单调栈例题:单调栈 我们先来看题目描述给定一个长度为 N 的整数数列输出每个数左边第一个比它小的数如果不存在则输出 −1 。输入格式第一行包含整数 N 表示数列长度。第二行包含 N 个整数表示整数数列。输出格式共一行包含 N 个整数其中第 i 个数表示第 i 个数的左边第一个比它小的数如果不存在则输出 −1 。数据范围 1 ≤ N ≤ 10^51 ≤ 数列中的元素 ≤ 10^9输入样例5 3 4 2 7 5输出样例-1 3 -1 2 2解题代码#includebits/stdc.h using namespace std; int a[100010],res[100010],n; stackintS; stackintid; int main(){ scanf(%d,n); for(int i1;in;i){ scanf(%d,a[i]); } memset(res,-1,sizeof(res)); for(int in;i1;i--){ while(!S.empty()a[i]S.top()){ res[id.top()]a[i]; S.pop(); id.pop(); } S.push(a[i]); id.push(i); } for(int i1;in;i){ printf(%d ,res[i]); } }