#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

+ Recent posts