#include <iostream>
#include <vector>
#include <stack>
int main()
{
int N = 0;
std::cin >> N;
std::vector<int> vec(N, 0);
std::vector<int> vecAnswer(N, 0);
for (int i = 0; i < N; i++)
{
std::cin >> vec[i];
}
std::stack<std::pair<int, int>> s = {};
for (int i = N - 1; i >= 0; --i)
{
while (!s.empty() && s.top().first < vec[i])
{
vecAnswer[s.top().second] = i + 1;
s.pop();
}
s.push({ vec[i],i });
}
for (int i = 0; i < N; i++)
{
std::cout << vecAnswer[i] << ' ';
}
return 0;
}
뒤에서 부터 계산
1. 본인을 추가
2. 본인의 크기와 이전 것의 크기를 확인해보고 맞다면 입력 후 빼기
3. 아니라면 다시 본인을 추가
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 15989 1, 2, 3 더하기 (0) | 2022.06.03 |
---|---|
[C++] 백준 5972 택배 배송 (0) | 2022.06.02 |
[C++] 백준 14719 빗물 (0) | 2022.05.31 |
[C++] 백준 16234번 인구 이동 (0) | 2022.05.30 |
[C++] 백준 17615 볼 모으기 (0) | 2022.05.28 |