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
.