結果

問題 No.3134 二分探索木
ユーザー ID 21712
提出日時 2025-04-29 15:44:15
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 672 ms / 2,000 ms
コード長 540 bytes
コンパイル時間 275 ms
コンパイル使用メモリ 12,416 KB
実行使用メモリ 52,724 KB
最終ジャッジ日時 2025-04-29 23:37:30
合計ジャッジ時間 7,469 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 5
other AC * 15
権限があれば一括ダウンロードができます

ソースコード

diff #

N = int(input())
A = list(map(int, input().split()))

D = [0] * (N+1)
for i, v in enumerate(A):
	D[v] = i

parent = [0] * (N+1)
for i in range(1, N):
	if D[i] < D[i+1]:
		parent[i+1] = i
	else:
		j = i
		while 1:
			if parent[j] == 0:
				parent[j] = i+1
				break
			elif D[parent[j]] < D[i+1]:
				parent[i+1] = parent[j]
				parent[j] = i+1
				break
			else:
				j = parent[j]

B = [0] * N
for i in range(1, N):
	B[i] = B[D[parent[A[i]]]] + 1
print(*B)

C = [0] * N
for i in range(N-1, 0, -1):
	C[D[parent[A[i]]]] += 1 + C[i]
print(*C)
0