Decodificador
Submit solution
Points:
100 (partial)
Time limit:
1.0s
Memory limit:
500M
Authors:
Problem type
Allowed languages
Ada, BrainF***, C, C#, C++, Dart, Go, Java, JS, Kotlin, Lua, Pascal, Prolog, Python, Swift, VB
Cada permutación puede ser codificada como una secuencia en la que es igual a la cantidad de tal que y .
Se pide que dado encontrar .
Nota: Una permutación con elementos contiene todos los numeros desde hasta exactamente una vez.
Entrada
Una línea con un número .
líneas cada una con un numero que representan la descripción de la codificación de una permutación.
Salida
líneas con la descripción de la permutación.
Ejemplo de entrada
2
0
0
Ejemplo de salida
1
2
Comments
emmm? alguien me explica?
Mi solución: Vamos a ir hallando las posiciones de los valores en orden decreciente, primero donde está , luego , y así hasta llegar a . Digamos que el más a la derecha está en la posición , entonces . Ahora eliminamos esa posición del arreglo . Ahora observemos que aportaba a para los , así que al eliminarlo debemos restarle a todos los para . Luego el nuevo más a la derecha es la posición de , y hacemos lo mismo, lo eliminamos y le restamos a todos a su derecha, y así sucesivamente. Entonces para hacer estas operaciones eficientemente podemos usar un Segment Tree con Lazy Update, con el cual podemos hacer cada operación en , por lo que esta solución tiene complejidad .