如果一個長度為 N 的序列中,數字 1 至 N 皆恰好出現一次,這個序列就被稱作一個排列 (permutation),例如:[1],[3,5,4,1,2],[3,1,2] 都是排列,但 [0],[2,2],[4,3,1] 都不是。
大陸人收到一個長度為 N 的排列 p1,p2,…,pN 當作禮物,但比起排列,大陸人更喜歡樹,所以他決定將這個排列轉換成一棵二元樹,他的作法如下:
以下是一個例子,考慮一個排列 p=[3,5,2,1,4],一開始被拿來當根的元素是 p2=5,左子樹和右子樹將分別由 p[1…1]=[3] 與 p[3…5]=[2,1,4] 建構而成,最後建構出來的二元樹如下:
設 di 代表節點 pi 的深度,也就是該點與樹根之間路徑邊的數量,請幫大陸人算出每個點的深度 di 是多少。
輸入第一行有一個正整數 N(1≤N≤105),代表數列的長度。 數入第二行包含 N 個正整數,代表為一個長度為 N 的排列 p1,p2,…,pN。
請在一行輸出 N 個整數 d1,d2,…,dN,代表 N 個節點 p1,p2,…,pN 的深度。
5 3 5 2 1 4
1 0 2 3 1
1 1
0
4 4 3 1 2
0 1 3 2
Codeforces