이진 탐색 트리

면접 대비

시간 제한2초메모리 제한512 MB

요약
정수 수열을 이진 검색 트리에 삽입하고 각 값이 놓이는 깊이를 출력한다.
난이도

쉬움10점 중 3점

유형
트리, 재귀, 시뮬레이션
정답자
아직 제출이 없습니다

문제

바트는 컴퓨터 과학에 관심이 많은 학생이고 여러 가지를 깊이 파고드는 것을 좋아한다. 이번 학기에 자료 구조 수업을 들으면서 이진 탐색 트리가 얼마나 대단한지 알게 되었다.

이진 탐색 트리는 각 정점이 최대 두 개의 자식을 가지는 트리이며, 오른쪽 자식에 저장된 값은 부모에 저장된 값보다 크거나 같고 왼쪽 자식에 저장된 값은 부모에 저장된 값보다 엄격하게 작다는 구조를 유지한다.

그림 1: 이진 탐색 트리

바트는 a1,a2,…,ana_1, a_2, \ldots, a_n 수열이 주어질 때 이 수들이 이진 트리의 어느 깊이에 저장되는지 알고 싶어 한다. 깊이는 해당 정점에서 트리의 가장 위쪽 정점(루트)까지 이동할 때 거치는 정점의 수를 나타낸다.

바트를 도와줄 수 있는가?

입력

첫 번째 줄에 nn (1≤n≤1041 \le n \le 10^4)이 주어진다. 다음 줄에 nn개의 정수 aia_i (∣ai∣<106|a_i| < 10^6)가 주어진다.

출력

nn개의 수를 출력한다. ii번째 수는 aia_i가 저장되는 깊이를 나타낸다.

예제2

  1. 예제 1

    입력
    9
    8 10 3 1 6 14 4 13 7
    
    예상 출력
    0 1 1 2 2 2 3 3 3
    
  2. 예제 2

    입력
    4
    -1 0 1 1
    
    예상 출력
    0 1 2 3