Сортировка по частоте с сохранением порядка

Rust Сложный sorting

Задача «Сортировка по частоте с сохранением порядка»

Дан массив целых чисел. Необходимо отсортировать его по убыванию частоты вхождения элементов. Если два элемента встречаются одинаковое количество раз, то они должны быть расположены в порядке их первого появления в исходном массиве. Требуется реализовать алгоритм сортировки с временной сложностью O(n log n) и использованием дополнительной памяти O(n).

Формат ввода

Первая строка содержит целое число n (1 ≤ n ≤ 10^5). Вторая строка содержит n целых чисел, разделенных пробелами.

Формат вывода

Выведите n целых чисел, разделенных пробелами — отсортированный массив.

Примеры

Пример 1

ВВОД
3 3 2 1
ВЫВОД
3 2 1
main.rs