Ordenación por clave con eliminación de duplicados
C++
Hard
sorting
Tarea «Ordenación por clave con eliminación de duplicados»
Dado un array de números enteros. Es necesario ordenarlo de forma ascendente, eliminando todos los valores duplicados, pero con una condición: si un número aparece más de una vez, después de eliminar los duplicados, su número de orden en el array ordenado (índice desde cero) debe ser igual al número de sus ocurrencias en el array original menos uno. En otras palabras, para cada valor único x que aparece k veces en el array original, debe haber exactamente una ocurrencia de x en el array resultante, y su índice debe ser igual a k-1. Si para algún x esto es imposible (por ejemplo, el índice está fuera de los límites del array o ya está ocupado por otro número), entonces dicho x no se incluye en el resultado. Se garantiza que para todos los números que deben incluirse, la condición es realizable. Imprima el array final, ordenado de forma ascendente.
Formato de entrada
Primera línea: un número entero n (1 ≤ n ≤ 10^5) — la cantidad de elementos. Segunda línea: n números enteros, cuyo valor absoluto no excede 10^9, separados por espacios.
Formato de salida
En la primera línea, imprima el número m — la cantidad de elementos en el array final. En la segunda línea, imprima m números enteros en orden ascendente.
Ejemplos
Ejemplo 1
ENTRADA
6
3 1 2 2 3 1
SALIDA
1
3
Ejemplo 2
ENTRADA
5
5 5 5 5 5
SALIDA
1
5
Ejemplo 3
ENTRADA
5
Математика Иванов 101 2 3
Физика Петров 202 3 2
Математика Иванов 101 2 3
Химия Сидоров 303 4 1
Физика Петров 202 3 2
SALIDA
3
Математика Иванов 101 2 3
Физика Петров 202 3 2
Химия Сидоров 303 4 1
Ejemplo 4
ENTRADA
7
4 2 4 2 4 2 4
SALIDA
2
2 4
Ejemplo 5
ENTRADA
3
Алгебра Смирнов 105 1 1
Алгебра Смирнов 105 1 1
Геометрия Смирнов 105 1 2
SALIDA
2
Алгебра Смирнов 105 1 1
Геометрия Смирнов 105 1 2
main.cpp