Practice · 1 of 5
Debug: Tìm kiếm nhị phân — off-by-one
**Bài toán (đã đúng):** Mảng tăng ngặt n phần tử. Trả về chỉ số (0-based)
của x nếu có, ngược lại trả về −1.
**Chương trình dưới đây SAI.** Tìm lỗi và sửa: với n = 1 nó in −1 dù
phần tử duy nhất có khớp x.
**Code lỗi:**
``cpp
void solve(std::istream& in, std::ostream& out) {
int n; in >> n;
vector<long long> a(n);
for (auto& x : a) in >> x;
long long x; in >> x;
int lo = 0, hi = n - 1, ans = -1;
while (lo < hi) { // BUG: phải là lo <= hi
int mid = lo + (hi - lo) / 2;
if (a[mid] == x) { ans = mid; break; }
else if (a[mid] < x) lo = mid + 1;
else hi = mid - 1;
}
out << ans;
}
`
**Yêu cầu:** nộp bản ĐÃ SỬA (đổi điều kiện vòng lặp, giữ nguyên logic
còn lại) và pass mọi test.
**Input:** dòng 1: n; dòng 2: mảng tăng; dòng 3: giá trị cần tìm.
**Ví dụ:** 1 / 4 / 4 -> 0` (bản lỗi in −1: vòng không chạy khi
lo == hi).
Back to lesson: Practice: Debugging Problem Set