思路 - 字丑勿喷
补充:
时间复杂度:$0(N)$ ,因为每个数据只会进栈一次,出栈一次,最多 2N 次,最后 st 为单调序列
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int st[N], tt;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
while (tt && st[tt] >= x) {
tt--;
}
if (tt) {
cout << st[tt] << ' ';
} else {
cout << "-1" << ' ';
}
st[++tt] = x;
}
return 0;
}