Editorial for ¿Cuántos Elementos Distintos?
Submitting an official solution before solving the problem yourself is a bannable offence.
Authors:
,Subtarea 1
Entonces, por lo que la respuesta es , o
Subtarea 2
La solución de la subtarea 3 sirve para esta subtarea, aquí es un poco más facil porque todos los elementos son o .
Subtarea 3
- .
Es suficiente iterar por todos los rangos y computar por cada uno, la cantidad de elementos distintos en tiempo lineal. Para hacerlo, llevamos un arreglo de marcados, tal que mark[x] = true
significa que aparece en el rango analizado. Luego, la respuesta es la cantidad valores true
en mark[]
.
Complejidad: .
Subtarea 4
De la subtarea anterior, estamos computando varias cosas múltiples veces. Observemos que entre el rango y el rango no hay mucha diferencia en la información que se lleva. En lugar de reiniciar mark[]
cada vez e iterar por modificando mark[]
, podemos simplemente fijar , luego iterar por en orden creciente, y actualizando solo en cada momento. Cada vez que mark[x]
cambia de false
a true
, le añadimos 1 a la respuesta.
Complejidad:
Subtarea 5
Digamos que es el primer , y si no existe tal , digamos que es .
Podemos considerar como la cantidad de .
Entonces, la "contribución" de cada a la respuesta es la cantidad de rangos y .
Tenemos que , y que . Por tanto, la contribución de a la respuesta es .
La solución entonces se puede expresar como . Esto toma tiempo lineal.
El cuello de botella de la solución está en computar . Podemos hacerlo en tiempo cuadrático simplemente iterando por hasta que encontremos un , lo cual es suficiente para aceptar esta subtarea.
Para subtarea, simplemente computamos en tiempo lineal en total. Cómo, podemos ir de derecha a izquierda, actualizando la posición de cada valor.
Otra solución sería, sumar las longitudes de todos los intervalos, y luego para cada elemento , restar todos los intervalos en los cuales no está presente, lo cual se puede hacer, siendo las ocurrencias de ( y ), como .
Comments