Сортировка по ключу с удалением дубликатов
C++
Сложный
sorting
Задача «Сортировка по ключу с удалением дубликатов»
Дан массив целых чисел. Необходимо отсортировать его по возрастанию, удалив все повторяющиеся значения, но с одним условием: если число встречается более одного раза, то после удаления дубликатов его порядковый номер в отсортированном массиве (индекс с нуля) должен быть равен количеству его вхождений в исходном массиве минус один. Другими словами, для каждого уникального значения x, которое встречается k раз в исходном массиве, в результирующем массиве должно быть ровно одно вхождение x, и его индекс должен быть равен k-1. Если для какого-то x это невозможно (например, индекс выходит за границы массива или уже занят другим числом), то такое x не включается в результат. Гарантируется, что для всех чисел, которые нужно включить, условие выполнимо. Выведите итоговый массив, отсортированный по возрастанию.
Формат ввода
Первая строка: целое число n (1 ≤ n ≤ 10^5) — количество элементов. Вторая строка: n целых чисел, по модулю не превышающих 10^9, разделенных пробелами.
Формат вывода
В первой строке выведите число m — количество элементов в итоговом массиве. Во второй строке выведите m целых чисел в порядке возрастания.
Примеры
Пример 1
ВВОД
6
3 1 2 2 3 1
ВЫВОД
1
3
Пример 2
ВВОД
5
5 5 5 5 5
ВЫВОД
1
5
Пример 3
ВВОД
5
Математика Иванов 101 2 3
Физика Петров 202 3 2
Математика Иванов 101 2 3
Химия Сидоров 303 4 1
Физика Петров 202 3 2
ВЫВОД
3
Математика Иванов 101 2 3
Физика Петров 202 3 2
Химия Сидоров 303 4 1
Пример 4
ВВОД
7
4 2 4 2 4 2 4
ВЫВОД
2
2 4
Пример 5
ВВОД
3
Алгебра Смирнов 105 1 1
Алгебра Смирнов 105 1 1
Геометрия Смирнов 105 1 2
ВЫВОД
2
Алгебра Смирнов 105 1 1
Геометрия Смирнов 105 1 2
main.cpp