#include <iostream>
#include <span>
#include <vector>
std::size_t lower(std::span<const int> values, int target) {
    std::size_t lo = 0, hi = values.size();
    while (lo < hi) {
        const auto mid = lo + (hi - lo) / 2;
        if (values[mid] < target) lo = mid + 1;
        else hi = mid;
    }
    return lo;
}
int main() {
    const std::vector<int> values{1, 3, 3, 7};
    if (lower(values, 3) != 1 || lower(values, 8) != 4 || lower(values, 0) != 0 ||
        lower(std::span<const int>{}, 3) != 0) return 1;
    std::cout << "lower=" << lower(values, 3) << " after-end=" << lower(values, 8) << '\n';
}
