TopCoder

User's AC Ratio

NaN% (0/0)

Submission's AC Ratio

NaN% (0/0)

Tags

Description

如果一個長度為 $N$ 的序列中,數字 $1$ 至 $N$ 皆恰好出現一次,這個序列就被稱作一個排列 (permutation),例如:$[1], [3, 5, 4, 1, 2], [3, 1, 2]$ 都是排列,但 $[0], [2, 2], [4, 3, 1]$ 都不是。

大陸人收到一個長度為 $N$ 的排列 $p_1, p_2, \ldots, p_N$ 當作禮物,但比起排列,大陸人更喜歡樹,所以他決定將這個排列轉換成一棵二元樹,他的作法如下:

  • 選取當前序列中最大的元素 $x$ 當作根。
  • 所有在最大元素左邊的元素們會形成 $x$ 的左子樹,建構左子樹的方式與原來的樹相同,如果左邊沒有元素,那麼左子樹就是空的。
  • 所有在最大元素右邊的元素們會形成 $x$ 的右子樹,建構右子樹的方式與原來的樹相同,如果右邊沒有元素,那麼右子樹就是空的。

以下是一個例子,考慮一個排列 $p = [3, 5, 2, 1, 4]$,一開始被拿來當根的元素是 $p_2 = 5$,左子樹和右子樹將分別由 $p[1 \ldots 1] = [3]$ 與 $p[3 \ldots 5] = [2, 1, 4]$ 建構而成,最後建構出來的二元樹如下:

設 $d_i$ 代表節點 $p_i$ 的深度,也就是該點與樹根之間路徑邊的數量,請幫大陸人算出每個點的深度 $d_i$ 是多少。

Input Format

輸入第一行有一個正整數 $N (1 \leq N \leq 10^ 5)$,代表數列的長度。
數入第二行包含 $N$ 個正整數,代表為一個長度為 $N$ 的排列 $p_1, p_2, \ldots, p_N$。

Output Format

請在一行輸出 $N$ 個整數 $d_1, d_2, \ldots, d_N$,代表 $N$ 個節點 $p_1, p_2, \ldots, p_N$ 的深度。

Sample Input 1

5
3 5 2 1 4

Sample Output 1

1 0 2 3 1

Sample Input 2

1
1

Sample Output 2

0

Sample Input 3

4
4 3 1 2

Sample Output 3

0 1 3 2

Hints

Problem Source

Codeforces

Subtasks

No. Testdata Range Constraints Score
1 0~2 範例測資 0
2 0~18 無額外限制 100

Testdata and Limits

No. Time Limit (ms) Memory Limit (VSS, KiB) Output Limit (KiB) Subtasks
0 1000 524288 65536 1 2
1 1000 524288 65536 1 2
2 1000 524288 65536 1 2
3 1000 524288 65536 2
4 1000 524288 65536 2
5 1000 524288 65536 2
6 1000 524288 65536 2
7 1000 524288 65536 2
8 1000 524288 65536 2
9 1000 524288 65536 2
10 1000 524288 65536 2
11 1000 524288 65536 2
12 1000 524288 65536 2
13 1000 524288 65536 2
14 1000 524288 65536 2
15 1000 524288 65536 2
16 1000 524288 65536 2
17 1000 524288 65536 2
18 1000 524288 65536 2