Tri par clé avec suppression des doublons
C++
Hard
sorting
Tâche «Tri par clé avec suppression des doublons»
Soit un tableau d’entiers. Il faut le trier par ordre croissant en supprimant toutes les valeurs en double, mais avec une condition : si un nombre apparaît plus d’une fois, après suppression des doublons, son index dans le tableau trié (index à partir de zéro) doit être égal au nombre de ses occurrences dans le tableau d’origine moins un. Autrement dit, pour chaque valeur unique x qui apparaît k fois dans le tableau d’origine, le tableau résultant doit contenir exactement une occurrence de x, et son index doit être égal à k-1. Si cela est impossible pour un certain x (par exemple, l’index dépasse les limites du tableau ou est déjà occupé par un autre nombre), alors ce x n’est pas inclus dans le résultat. Il est garanti que pour tous les nombres qui doivent être inclus, la condition est réalisable. Affichez le tableau final, trié par ordre croissant.
Format d\ entrée
Première ligne : un entier n (1 ≤ n ≤ 10^5) — le nombre d’éléments. Deuxième ligne : n entiers, ne dépassant pas 10^9 en valeur absolue, séparés par des espaces.
Format de sortie
Sur la première ligne, affichez le nombre m — le nombre d’éléments dans le tableau final. Sur la deuxième ligne, affichez m entiers dans l’ordre croissant.
Exemples
Exemple 1
ENTRÉE
6
3 1 2 2 3 1
SORTIE
1
3
Exemple 2
ENTRÉE
5
5 5 5 5 5
SORTIE
1
5
Exemple 3
ENTRÉE
5
Математика Иванов 101 2 3
Физика Петров 202 3 2
Математика Иванов 101 2 3
Химия Сидоров 303 4 1
Физика Петров 202 3 2
SORTIE
3
Математика Иванов 101 2 3
Физика Петров 202 3 2
Химия Сидоров 303 4 1
Exemple 4
ENTRÉE
7
4 2 4 2 4 2 4
SORTIE
2
2 4
Exemple 5
ENTRÉE
3
Алгебра Смирнов 105 1 1
Алгебра Смирнов 105 1 1
Геометрия Смирнов 105 1 2
SORTIE
2
Алгебра Смирнов 105 1 1
Геометрия Смирнов 105 1 2
main.cpp