如果一個長度為 $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$ 當作禮物,但比起排列,大陸人更喜歡樹,所以他決定將這個排列轉換成一棵二元樹,他的作法如下:
以下是一個例子,考慮一個排列 $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$ 是多少。
輸入第一行有一個正整數 $N (1 \leq N \leq 10^ 5)$,代表數列的長度。
數入第二行包含 $N$ 個正整數,代表為一個長度為 $N$ 的排列 $p_1, p_2, \ldots, p_N$。
請在一行輸出 $N$ 個整數 $d_1, d_2, \ldots, d_N$,代表 $N$ 個節點 $p_1, p_2, \ldots, p_N$ 的深度。
Codeforces
No. | Testdata Range | Constraints | Score |
---|---|---|---|
1 | 0~2 | 範例測資 | 0 |
2 | 0~18 | 無額外限制 | 100 |