AcWing 830. 单调栈
原题链接
简单
作者:
王小强
,
2021-03-16 11:07:17
,
所有人可见
,
阅读 357
维护一个单调递减(非严格)栈
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int n;
int main(int argc, char** argv) {
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; ++i) cin >> nums[i];
stack<int> stk; // 单调递增栈 monotonic increasing stack(存放的是元素的下标)
vector<int> ans(n, -1); // 答案数组
for (int i = n - 1; i >= 0; --i) { // 从后往前(从右往左)遍历
while (not stk.empty() and nums[stk.top()] > nums[i]) {
ans[stk.top()] = nums[i];
stk.pop();
}
stk.emplace(i);
}
for (const auto& x : ans)
cout << x << ' ';
return 0;
}