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));