Hi Codeforcers!
Recently I was trying to solve a query-based problem. Here is the problem statement:
We have a set that initially contains only a single 0. There are 3 types of queries.
1- INSERT x : Insert number x to the set
2- DELETE x : Remove number x from the set. It is guaranteed that the number exists in the set
3- MEDIAN : Print median of the numbers in the set. Median of a set of numbers is the middle element after sorting the numbers in the set in non-decreasing order. If the size of set is a multiple of 2, among the two middle elements print the left one.
Number of queries won't exceed $$$2 \cdot 10^5$$$.
I will assume that there is only INSERT/MEDIAN queries for convenience.
Naive solutions won't pass the TL. By naive I mean inserting each element in $$$O(1)$$$ and for each median queries sorting the container (probably std::vector) in $$$O(nlogn)$$$. This will lead us to an $$$O(Q\cdot n \cdot logn)$$$ total time complexity which won't pass the time limit with a strong test. I believe there is a solution using some non-STL data structures. We can solve this problem using