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