Diferencia (pensamiento)

Diferencia (pensamiento)

Dados n números y luego Q consultas, cada consulta da l, r, x, y le pide que agregue x a cada valor de l a r, y solo le da O (n) rango de tiempo ,¿Cómo hacer?

Piénselo:
1. Si es violento, haga clic en ly r y conviértase en un perro O (n ^ 2) T.
2. Usa un árbol de segmento de línea o una matriz de árbol para hacerlo. Lo siento, esta complejidad es O (Qlogn), pero seguirá siendo T (aunque resuelven otros problemas muy NB)
3. Diferencia, sí, es el título, estoy muy feliz O (n) + constante ...

Entonces, ¿cómo resolverlo con diferencia?
------ En la consulta, no vamos a para agregar x, sino que hacemos una marca y lo sumamos al final

Realización:
Primero abra una matriz de diferencias especial (tamaño = longitud de secuencia en la pregunta)

Ej .:
Secuencia original: 1, 2, 3, 4, 5, 6, 7
Primera operación: (l, r, x) = (2, 4, 7) Agregamos uno
a la posición 2 en la matriz de diferencias 7, luego reste 7 de la posición de 4 + 1 ;

La segunda operación: (l, r, x) = (1, 3, 4)
Nos añadimos un 4 a la 1 posición en la matriz de diferencia , y luego restamos 4 de la 3 + 1 posición ;

La matriz de diferencias es: 4 7 0 -4-7 0 0

La operación real es: cf [i] = cf [i-1] + cf [i]
(cf: diferencia)

La matriz de diferencias modificada es: 4 11 11 7 0 0 0

Luego aplique esta matriz de diferencias a la matriz original

Supongo que te gusta

Origin blog.csdn.net/qq_40534166/article/details/99341435
Recomendado
Clasificación