Найти количество элементов массива, больше заданного
Есть задача: Вам нужно написать функцию, которая принимает на вход отсортированный массив целых чисел и целое число. Назовём его точкой отсчёта. Функция должна посчитать количество элементов в массиве, которые больше, чем переданное в функцию целое число — то есть больше, чем точка отсчёта. Требуемая алгоритмическая сложность: время O(log2n), дополнительная память O(1).
Никак не могу понять что делать с повторяющемся числами, какое условия выхода тогда.
Мой код
#include <iostream>
int count_elemnt_max(int* arr, int size, int x)
{
int left = 0;
int right = size - 1;
int middle{};
while (left < right)
{
middle = (left + right) / 2;
if (arr[middle] == x) {
return (size - 1) - middle;
}
if (arr[middle] > x) {
right = middle - 1;
}
else if (arr[middle] < x) {
left = middle + 1;
}
}
if (x < arr[left])
return size - middle;
else if (arr[left] <= x) {
return size - middle;
}
else if (arr[left] >= x) {
return size - middle - 1;
}
}
int main()
{
setlocale(LC_ALL, "ru");
int arr[] = { 14, 16, 19, 32, 32, 32, 56, 69, 72 };
std::cout << "Введите точку отсчета: ";
int num{};
std::cin >> num;
std::cout << "Количество элементов в массиве больших, чем " << num << ": "
<< count_elemnt_max(arr, sizeof(arr) / sizeof(int), num) << std::endl;
return 0;
}