单调栈(模板题)
内存限制: 256 MiB 时间限制: 100 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较
题目描述
给定一个长度为 n 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 。
输入格式
第一行输入一个 n
第二行输入 n 个整数
输出格式
n 行,每行 1 个数,表示当前数左边第一个比当前数小的数
样例
样例输入
复制5
3 4 2 7 5
样例输出
复制-1
3
-1
2
2
数据范围与提示
n <= 100000
ai 属于 int
#include <bits/stdc++.h><>
using namespace std;
const int maxn = 1e5 + 5;
int a[maxn];
stack<int> s;
int main() {
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
for(int i = 1; i <= n; i++) {
while(!s.empty() && s.top() >= a[i]) {
s.pop();
}
if(!s.empty()) {
printf("%d\n", s.top());
} else {
printf("-1\n");
}
s.push(a[i]);
}
return 0;
}