Finding MK Average LeetCode solution in Python
1from sortedcontainers import SortedList234class MKAverage:56MAX_NUM = 10**578def __init__(self, m: int, k: int):910self.m = m11self.k = k1213# sorted list14self.sl = SortedList([0] * m)15# sum of k smallest elements16self.sum_k = 017# sum of m - k smallest elements18self.sum_m_k = 01920# queue for the last M elements if the stream21self.q = deque([0] * m)2223def addElement(self, num: int) -> None:24# Time: O(logm)2526m, k, q, sl = self.m, self.k, self.q, self.sl2728# update q29q.append(num)30old = q.popleft()3132# remove the old num33r = sl.bisect_right(old)34# maintain sum_k35if r <= k:36self.sum_k -= old37self.sum_k += sl[k]38# maintain sum_m_k39if r <= m - k:40self.sum_m_k -= old41self.sum_m_k += sl[m - k]42# remove the old num43sl.remove(old)4445# add the new num46r = sl.bisect_right(num)47if r < k:48self.sum_k -= sl[k - 1]49self.sum_k += num50if r < m - k:51self.sum_m_k -= sl[m - k - 1]52self.sum_m_k += num5354sl.add(num)5556return5758def calculateMKAverage(self) -> int:59# Time: O(1)60if self.sl[0] == 0:61return -162return (self.sum_m_k - self.sum_k) // (self.m - self.k * 2)