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