n = int(input())
top = list(map(int,input().split()))
answer = [0] * n
stack= []
for i in range(n):
while stack:
if stack[-1][1] > top[i]:
answer[i] = stack[-1][0] + 1
break
else:
stack.pop()
stack.append([i, top[i]])
print(*answer)
stack에 들어간 값과 현재 값을 비교해서 stack에 들어있는 값이 더 크다면 현재 index + 1(0부터 시작했으니) 해준 값을 answer에 넣어준다. (들어가지 않는다면 자신보다 큰 경우가 없어서 초기화해주었던 값인 0이 그대로 출력된다.)
바로 직전의 값을 stack에 넣어서 뒤에 값이 큰지 작은지를 확인한 뒤 뒤에 값이 작다면 왼쪽으로 레이저를 보낼 때 수신되는 것을 의미하기에 해당 index에 +1 을 해주면 된다.
이때 바로 앞의 값이 작은 경우엔 stack에서 해당 수를 빼주고 바로 또 그 앞의 수를 확인해서 그 수보다 현재 수가 작으면 해당 index + 1 값을 answer 값으로 돌려준다.