Возможный дубликат:
алгоритм скользящей медианы в C
Учитывая, что целые числа читаются из потока данных. Найдите медиану прочитанных элементов эффективным способом.
Решение, которое я прочитал: мы можем использовать максимальную кучу на левой стороне для представления элементов, которые меньше эффективной медианы, и минимальную кучу на правой стороне для представления элементов, которые превышают эффективную медиану.
После обработки входящего элемента количество элементов в кучах отличается не более чем на 1 элемент. Когда обе кучи содержат одинаковое количество элементов, мы находим среднее значение корневых данных кучи как эффективную медиану. Когда кучи не сбалансированы, мы выбираем эффективную медиану из корня кучи, содержащей больше элементов.
Но как мы построим максимальную кучу и минимальную кучу, то есть как мы узнаем эффективную медиану здесь? Я думаю, что мы вставили бы 1 элемент в max-heap, а затем следующий 1 элемент в min-heap и так далее для всех элементов. Поправь меня, если я здесь не прав.