Найти количество элементов массива, больше заданного

Есть задача: Вам нужно написать функцию, которая принимает на вход отсортированный массив целых чисел и целое число. Назовём его точкой отсчёта. Функция должна посчитать количество элементов в массиве, которые больше, чем переданное в функцию целое число — то есть больше, чем точка отсчёта. Требуемая алгоритмическая сложность: время 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;
}

Ответы (0 шт):