탑문제와 상당히 유사했던 문제.
Stack과 index를 결합해서 사용해야 해결할 수 있었던 문제였다.
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#define endl "\n"
using namespace std;
int n,a;
stack<pair<int,int>> q;
int s = 0;
int main() {
cin >> n;
vector<int> result(n, -1);
if (n == 1) {
cout << -1 << endl;
return 0;
}
else {
cin >> a;
q.push({ a,0 });
for (int i = 1; i < n; i++) {
cin >> a;
if (a < q.top().first) q.push({a,i});
else {
while (!q.empty() && a > q.top().first) {
result[q.top().second] = a;
q.pop();
}
q.push({ a ,i});
}
}
}
for (int i = 0; i < n; i++) {
cout << result[i] << " ";
}
return 0;
}