G. Приоритетная очередь
2000 мс · 256 МБ · всё или ничего
Реализуйте кучей приоритетную очередь с двумя операциями: добавить элемент и извлечь максимум. Вместимость очереди ограничена числом .
В этой задаче элементы могут повторяться, и поэтому нужны правила, делающие ответ однозначным:
- Просеивание не двигает элемент дальше, чем нужно. Если , вызов просеивания не должен менять их местами: обмен равных кучу не портит, но он бесполезен.
- При двух равных детях выбирается левый.
Первое правило означает строгое сравнение: a[i] > a[i / 2], а не >=. Второе - что при равенстве левого и правого ребёнка берётся левый, то есть проверка правого должна быть строгой относительно уже выбранного.
Формат ввода
В первой строке - вместимость и число запросов ().
Далее строк. Запрос типа 1 - извлечь максимум, без параметров. Запрос типа 2 - добавить число из .
Формат вывода
Ответ на каждый запрос по правилам выше, по одной строке.
После всех запросов - строка с кучей в конечном состоянии. Если очередь пуста, выведите пустую строку.
Примеры
ввод
4 7 1 2 9 2 4 2 9 2 9 2 7 1
вывод
-1 1 2 3 2 -1 2 9 9 4 9
ввод
1 2 2 5 2 5
вывод
1 -1 5
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.