int n = 10;
int a[n];
// count(x) -- ?
sort(a, a + n); // O(nlogn)
int i = lower_bound(a, a + n, x) - a; // i == n : lower_bound = min i : a[i] >= x
return i < n && a[i] == x;
-----
r = l
r = l + 1
// min i : a[i] >= x
int my_lower_bound( int x )
{
int l = 0, r = n; // [l, r]
while (l != r)
{
int m = (l + r) / 2;
if (a[m] >= x)
r = m;
else
l = m + 1;
}
return l; // l == r
}
r = l + 1
r = l + 2
// min i : a[i] >= x
int my_lower_bound( int x )
{
// [l, r)
int l = 0, r = n; // n+1
while (r - l > 1)
{
int m = (l + r) / 2;
if (a[m] >= x)
r = m;
else
l = m;
}
return l;
}
// Задача: найти количество чисел со значением от l до r.
// [l..r] = [0..r] - [0..l-1]
// [l..r] = [0..r+1) - [0..l)
return lower_bound(a, a + n, r + 1) - lower_bound(a, a + n, l)
// Задача: найти количество чисел на отрезке от l до r со значением равным x
for (int i = 0; i < n; i++)
b[i] = make_pair(a[i], i)
sort(b, b + n); // (x, i_1) (x, i_2) ... (x, i_k)
return lower_bound(b, b + n, make_pair(x, r + 1)) - lower_bound(b, b + n, make_pair(x, l));