Загрузка данных


import heapq

class StreamStatistics:
    def __init__(self):
        self._low = []   # max-heap (хранится как отрицательные числа) — нижняя половина
        self._high = []  # min-heap — верхняя половина

    def addValue(self, number: float) -> None:
        if not self._low or number <= -self._low[0]:
            heapq.heappush(self._low, -number)
        else:
            heapq.heappush(self._high, number)

        # Балансировка: размеры куч не должны отличаться больше чем на 1
        if len(self._low) > len(self._high) + 1:
            val = -heapq.heappop(self._low)
            heapq.heappush(self._high, val)
        elif len(self._high) > len(self._low) + 1:
            val = heapq.heappop(self._high)
            heapq.heappush(self._low, -val)

    def getMedian(self) -> float:
        if not self._low and not self._high:
            raise ValueError("Поток пуст, медиана не определена")
        if len(self._low) == len(self._high):
            return (-self._low[0] + self._high[0]) / 2.0
        elif len(self._low) > len(self._high):
            return float(-self._low[0])
        else:
            return float(self._high[0])