結果
問題 |
No.3134 二分探索木
|
ユーザー |
![]() |
提出日時 | 2025-05-02 21:42:40 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,091 bytes |
コンパイル時間 | 482 ms |
コンパイル使用メモリ | 82,244 KB |
実行使用メモリ | 148,236 KB |
最終ジャッジ日時 | 2025-05-02 21:42:46 |
合計ジャッジ時間 | 5,713 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 8 TLE * 1 -- * 6 |
ソースコード
n = int(input()) A = list(map(int, input().split())) lst = [] id = 0 N = [[] for _ in range(n)] R = [[] for _ in range(n)] lst.append([A[0], -1, -1]) id = 1 D = {A[i]: i for i in range(n)} for i in range(1, n): now = 0 while True: a, l, r = lst[now] if a < A[i]: if r == -1: N[D[a]].append(i) R[i].append(D[a]) lst[now][2] = id lst.append([A[i], -1, -1]) id += 1 break else: now = r else: if l == -1: N[D[a]].append(i) R[i].append(D[a]) lst[now][1] = id lst.append([A[i], -1, -1]) id += 1 break else: now = l B = [0] * n C = [1] * n S = [0] E = [] while S: now = S.pop() E.append(now) for nxt in N[now]: B[nxt] = B[now] + 1 S.append(nxt) for e in E[::-1]: for nxt in R[e]: C[nxt] += C[e] for i in range(n): C[i] -= 1 print(*B) print(*C)