vector<double> getMedian(vector<int> &arr) {
// code here
vector<double> ans;
priority_queue<int> maxheap;
priority_queue<int, vector<int>, greater<int>> minheap;
for(int i=0; i<arr.size(); i++) {
if(maxheap.empty() || arr[i] <= maxheap.top()) maxheap.push(arr[i]);
else minheap.push(arr[i]);
//cout << "min " << minheap.size() << ", max " << maxheap.size() << endl;
if(maxheap.size() > minheap.size()+1) {
minheap.push(maxheap.top());
maxheap.pop();
} else if(minheap.size() > maxheap.size()) {
maxheap.push(minheap.top());
minheap.pop();
}
//cout << "minS " << minheap.size() << ", maxS " << maxheap.size() << endl;
double mid = 0;
if(maxheap.size() > minheap.size()) mid = maxheap.top();
else {
//cout << "minh " << minheap.top() << ", maxh " << maxheap.top() << endl;
mid = (double)(minheap.top()+maxheap.top())/2;
}
//cout << "mid : " << mid << endl;
ans.push_back(mid);
}
return ans;
}