常用模型:给定一个序列,求序列中每个数左边离它最近的且比它小的数在哪个位置。
1. 题目
给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。
- 用栈存储第
i
个数的左边的所有元素,从栈顶往下找第一个比第i
个数小的数
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n;
int stk[N], tt;
int main()
{
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;
}
2 一些例子
待补充