- 入力処理(fsによる読み込み)
- 配列
Aのソート処理 - 二分探索
lowerBound()の仕組み(図で詳しく) - 出力処理(配列の結果を join して出力)
const input: string[] = fs.readFileSync('/dev/stdin', 'utf8').trim().split(/\s+/);fs.readFileSync('/dev/stdin', 'utf8')により 全体を一気に読み込み。trim().split(/\s+/)によって、スペースや改行区切りの数字列を string[] として取得。
5
1 3 3 3 1
2
4
3
input = [
"5", // N
"1", "3", "3", "3", "1", // A
"2", // Q
"4", "3" // クエリX
]
A.sort((a, b) => a - b);- JavaScriptの標準ソート(文字列ソート)ではなく、数値ソート。
- 昇順に並び替える。
Before sort: [1, 3, 3, 3, 1]
↓
After sort: [1, 1, 3, 3, 3]
function lowerBound(arr: number[], target: number): number {
let left = 0;
let right = arr.length;
while (left < right) {
const mid = (left + right) >>> 1;
if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}「配列 arr の中で target より小さい要素はいくつあるか?」
➡️ arr はソート済なので、二分探索で調べられる!
arr = [1, 1, 3, 3, 3]
target = 3
| left | mid | right | arr[mid] | 判定 | 次の範囲 |
|---|---|---|---|---|---|
| 0 | 2 | 5 | 3 | 3 >= 3 → ✖ | [0, 2) |
| 0 | 1 | 2 | 1 | 1 < 3 → ✔ | [2, 2) (終了) |
➡️ 結果:left = 2 → 3 より小さい要素は 2個
配列: [1, 1, 3, 3, 3]
index: 0 1 2 3 4
target: 3
↑
[left=2] = 答え!
console.log(results.join('\n'));resultsにクエリごとの答えを配列で格納。- 最後に
join('\n')により Q行の出力としてまとめて出力。
results = [5, 2]
console.log(results.join('\n')) →
5
2
入力 (fs.readFileSync)
↓
文字列配列 input[]
↓
配列Aの抽出・整形
↓
Aをソート
↓
各クエリに対して
┌───────────────┐
│ lowerBound() │ ←─── target X
└───────────────┘
↓
結果を配列に保存
↓
join('\n')でまとめて出力
| 提出日時 | 問題 | ユーザ | 言語 | 得点 | コード長 | 結果 | 実行時間 | メモリ | |
|---|---|---|---|---|---|---|---|---|---|
| 2025-07-06 23:34:52 | B11 - Binary Search 2 | myoshizumi | Go (go 1.20.6) | 1000 | 803 Byte | 42 ms | 3004 KiB | 詳細 | |
| 2025-07-06 23:24:50 | B11 - Binary Search 2 | myoshizumi | PHP (php 8.2.8) | 1000 | 887 Byte | 76 ms | 32112 KiB | 詳細 | |
| 2025-07-06 23:21:04 | B11 - Binary Search 2 | myoshizumi | Python (CPython 3.11.4) | 1000 | 899 Byte | 112 ms | 36232 KiB | 詳細 | |
| 2025-07-06 23:15:49 | B11 - Binary Search 2 | myoshizumi | TypeScript 5.1 (Node.js 18.16.1) | 1000 | 1048 Byte | 126 ms | 76908 KiB | 詳細 | |
| 2025-07-06 23:11:11 | B11 - Binary Search 2 | myoshizumi | JavaScript (Node.js 18.16.1) | 1000 | 877 Byte | 384 ms | 76448 KiB | 詳細 |