А разве там не тупо берем в сет суем все неиспользованные, далее если меньше текущей медианы, то вынимаем 2 минимальных, больше - 2 максимальных, та же - 1 минимум и 1 максимум. Если медиана еще отсутствует в списке, то пихаем ее вместо 1 из запихнутых