Median in a stream

Posted: 9 Dec, 2020
Difficulty: Hard

PROBLEM STATEMENT

Try Problem

Given that integers are read from a data stream. Your task is to find the median of the elements read so far.

Median is the middle value in an ordered integer list. If the size of the list is even there is no middle value. So the median is the floor of the average of the two middle values.

For example :
[2,3,4] - median is 3.
[2,3] - median is floor((2+3)/2) = 2.


Input Format:
The first line of input contains a single integer T, representing the number of test cases or queries to be run. 

Then the T test cases follow.
The first line of each test case contains the number of elements, N, in the input data stream.

The second line of each test case contains N space separated elements of the input data stream.
Output Format:
For each test case, print the median of the elements after each incoming element. Each median value is separated by a single space.

The output of each test case is printed in a separate line.
Note :
You do not need to print anything, just return the vector of medians after each element is read from the stream. 
Constraints :
1 <= T <= 10
1 <= N <= 10^4
0 <= data <= 10^8
Where T is the number of test cases, N is the number of elements in the data stream.

Time Limit : 1 sec
Approach 1

Store the incoming data elements in a vector. Sort the vector everytime you need to output the median.

Algorithm:

  1. Store the incoming elements of the data stream in a vector.
  2. Step by step insert one element and sort the vector as soon as any element is added in the vector.
  3. If the size of the vector is odd, print the middle element of the sorted vector.
    If the size of the vector is even, return the mean of the middle two elements of the sorted vector.
Try Problem