// Error a propósito: (lo + hi) / 2 con índices int hace overflow cuando el rango es grande.
#include <iostream>

namespace {

// Un arreglo enorme que no existe en memoria: el elemento i vale i.
bool is_at_least(int i, int x) {
    return i >= x;
}

}  // namespace

int main() {
    int lo = 0;
    int hi = 2000000000;
    int x = 1500000000;
    while (lo < hi) {
        int mid = (lo + hi) / 2;
        if (is_at_least(mid, x)) {
            hi = mid;
        } else {
            lo = mid + 1;
        }
    }
    std::cout << "primero >= x: " << lo << "\n";
    return 0;
}
