| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 346686 | admin_cgn | 【C6-8】二分查找左侧边界 | C++ | 通过 | 100 | 142 MS | 652 KB | 756 | 2025-09-11 14:14:53 |
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int a[N], n, q; // 返回 x 在 a[] 中第一次出现的下标,不存在返回 -1 int firstPos(int x) { int l = 1, r = n; while (l < r) { int mid = (l + r) >> 1; // 向下取整 if (a[mid] >= x) r = mid; // 答案在左半 [l, mid] else l = mid + 1; // 答案在右半 [mid+1, r] } // 循环结束后 l==r,再验证是否真的是 x return a[l] == x ? l : -1; } int main() { cin >> n; for (int i = 1; i <= n; ++i) cin >> a[i]; cin >> q; while (q--) { int x; scanf("%d",&x); printf("%d ", firstPos(x)); } return 0; }