// Sigue la búsqueda binaria del primer elemento mayor o igual a x.
#include <cstddef>
#include <iostream>
#include <vector>

namespace {

void trace(const std::vector<int>& items, int x) {
    std::cout << "x = " << x << "\n";
    std::size_t lo = 0;
    std::size_t hi = items.size();
    while (lo < hi) {
        std::size_t mid = lo + (hi - lo) / 2;
        std::cout << "  lo=" << lo << " hi=" << hi << " mid=" << mid << " items[mid]=" << items[mid]
                  << (items[mid] < x ? " < x" : " >= x") << "\n";
        if (items[mid] < x) {
            lo = mid + 1;
        } else {
            hi = mid;
        }
    }
    std::cout << "  termina con lo=hi=" << lo << "\n";
}

}  // namespace

int main() {
    std::vector<int> items = {2, 3, 3, 5, 8, 8, 9};
    trace(items, 8);
    trace(items, 4);
    trace(items, 10);
    return 0;
}
