AcWing 830. 单调栈
原题链接
简单
作者:
Eternity.
,
2025-06-06 13:47:55
· 北京
,
所有人可见
,
阅读 2
- 本质:每次查询前,把
大于等于自己的元素
(也就是不符合题意的元素)弹出。然后此时的栈顶元素,就是比自己小的第一个元素
- Tips:不一定非得按照课程中讲解的模拟思路写,STL也很好用。
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
int n;
stack<int> q;
void pop(int v)
{
while (!q.empty() && v <= q.top())
{
q.pop();
}
}
int query(int v)
{
return q.empty() ? -1 : q.top();
}
int main()
{
// freopen("1.in", "r", stdin);
// freopen("1.out", "w", stdout); // 把标准输出绑定到 1.out
cin >> n;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
pop(x); // check是否清除前面比自己大的:因为当前元素可以代表比自己大的元素。[比自己大,那么自己一定符合题意]
cout << query(x) << ' ';
q.push(x);
}
return 0;
}