AcWing 830. 单调栈
原题链接
简单
作者:
Lupinus
,
2021-05-27 15:23:14
,
所有人可见
,
阅读 188
#include <iostream>
using namespace std;
using ll = long long;
const int maxn = 1e6;
ll stk[maxn], top;
// 拓展:左边第一个比它大的元素(容易)
// 右边第一个比它小的元素:从右向左扫描
int main(int argc, char const *argv[])
{
int n;
cin >> n;
while (n--) {
ll x;
cin >> x;
// 比自己大和相等的数都不是答案
while (top) {
if (stk[top - 1] >= x) {
top--;
} else {
break; // 不然死循环了
}
}
// 自己很小,不存在答案
if (!top) {
cout << -1 << ' ';
} else {
cout << stk[top - 1] << ' ';
}
stk[top++] = x;
}
return 0;
}