2
Time: addElement: O(logm) | calculateMKAverage: O(1)4
Tag: TreeMap, Sorting, Queue9
map<int, int> left, middle, right;11
int sizeofLeft, sizeofMiddle, sizeofRight;16
void addToSet1(int num) {21
void deleteFromSet1(int num) {23
if (left[num] == 0) left.erase(num);27
void addToSet2(int num) {33
void deleteFromSet2(int num) {35
if (middle[num] == 0) middle.erase(num);40
void addToSet3(int num) {45
void deleteFromSet3(int num) {47
if (right[num] == 0) right.erase(num);52
MKAverage(int m, int k) {53
sizeofLeft = 0, sizeofMiddle = 0, sizeofRight = 0;59
void addElement(int num) {63
} else if (sizeofMiddle < (m - (2 * k))) {64
int lastEle = prev(left.end())->first;68
deleteFromSet1(lastEle);73
} else if (sizeofRight < k) {74
int last1 = prev(left.end())->first;75
int last2 = prev(middle.end())->first;76
if (num >= last1 && num >= last2) {78
} else if (num >= last1 && num < last2) {79
deleteFromSet2(last2);83
deleteFromSet2(last2);85
deleteFromSet1(last1);91
int toErase = q.front();93
int first3 = right.begin()->first;94
int first2 = middle.begin()->first;95
int first1 = left.begin()->first;97
if (toErase >= first3) {98
deleteFromSet3(toErase);99
} else if (toErase >= first2) {100
deleteFromSet3(first3);101
deleteFromSet2(toErase);104
deleteFromSet3(first3);105
deleteFromSet2(first2);106
deleteFromSet1(toErase);114
int calculateMKAverage() {115
if (q.size() < m) return -1;116
return mkSum / (m - (2 * k));