#include<vector>
#include <stack>
using namespace std;
vector<int> find(vector<int> &num) {
int len = num.size();
stack<int> s;
int i = 0;
vector<int> res(len, -1);
//通过维护一个单调递减栈来搜索,如果遇到递增的数组则可以确定栈内若干个数的结果
//本质为在杂乱的数组中维护递减栈寻找结果
while (i < len) {
if (s.empty() || num[s.top()] >= num[i]) {
s.push(i++);
}
else{
res[s.top()] = num[i];
s.pop();
}
}
return res;
}
int main() {
vector<int> num = { 1, 3, 2, 4, 99, 101, 5, 8 };
// vector<int> num = {1, 1, 1, 1, 1, 1, 1};
// vector<int> num = {};
vector<int> res = find(num);
for (auto i : res)
cout << i << " ";
return 0;
}