結果
問題 |
No.3134 二分探索木
|
ユーザー |
![]() |
提出日時 | 2025-05-02 12:35:03 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 707 ms / 2,000 ms |
コード長 | 1,161 bytes |
コンパイル時間 | 2,550 ms |
コンパイル使用メモリ | 81,372 KB |
実行使用メモリ | 96,208 KB |
最終ジャッジ日時 | 2025-05-02 12:35:14 |
合計ジャッジ時間 | 10,907 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 15 |
ソースコード
import java.io.*; import java.lang.*; import java.util.*; class Main { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(in.readLine()); int[] B = new int[N], C = new int[N]; C[0] = N - 1; TreeMap<Integer,Integer> map = new TreeMap<>(); String[] nums = in.readLine().split(" "); for (int i = 0; i < N; i++) { int a = Integer.parseInt(nums[i]); Integer lb = map.lowerKey(a); Integer ub = map.higherKey(a); if (lb == null) { if (ub != null) { B[i] = B[map.get(ub)] + 1; C[i] = (ub - 1) - 1; } } else if (ub == null) { B[i] = B[map.get(lb)] + 1; C[i] = N - (lb + 1); } else { B[i] = Math.max(B[map.get(lb)], B[map.get(ub)]) + 1; C[i] = (ub - 1) - (lb + 1); } map.put(a, i); } StringBuilder sb = new StringBuilder(); for (int i = 0; i < N; i++) { if (i > 0) sb.append(' '); sb.append(B[i]); } sb.append('\n'); for (int i = 0; i < N; i++) { if (i > 0) sb.append(' '); sb.append(C[i]); } sb.append('\n'); System.out.print(sb); } }