[Estructura de datos de aprendizaje] cola monótona

La cola monótona, es decir, una cola ordenada de elementos internos relativos al comparador, puede consultar fácilmente el valor máximo / mínimo en un intervalo continuo en la secuencia

También puede optimizar las decisiones durante las transiciones de estado para reducir la complejidad del tiempo. (Bueno, esta frase se dice en el OI-Wiki, como konjac qwq no sé cómo optimizar dp)

 

Por ejemplo, queremos saber el número más pequeño en cada número k consecutivo en una secuencia numérica de longitud n

Si se resuelve violentamente, el recorrido es de 1 a n-k + 1, complejidad O (n * k), y el valor en cada subsecuencia debe compararse con otros valores, que es relativamente lento = - =

Para este problema, puede mantener una cola monótona decreciente y prestar atención al rango de números en la cola que no exceda k

 

Método de mantenimiento:

Cada vez que se lee un nuevo número en la secuencia, se compara la relación entre el número y el número al final del equipo.

1. Si el número es mayor que el número al final del equipo, únase al equipo.

2. Si el resumen es menor que el final del equipo, el final del equipo está fuera del equipo y el número se compara con el final del equipo nuevamente.

 

Después de ingresar al equipo, verifique si el rango de números contenido en los números de cabeza y cola del equipo actual supera k

Si excede, el equipo dejará el equipo por primera vez.

 

cin >> t;
while (! dq.empty () && dq.back ()> t) 
    dq.pop_back (), no.pop_back (); 
dq.push_back (t), no.push_back (i); 
while (no.back () - no.front ()> = k) 
    dq.pop_front (), no.pop_front ();

// Esto está usando deque como la cola monótona de mantenimiento del contenedor, no es también una deque, manteniendo el número correspondiente (subíndice) del número en dq

 El elemento de cabecera de la cola mantenida de esta manera es siempre el más pequeño de cada k elementos.

O (1) se puede extraer, y cada número se puede quitar y poner en cola como máximo una vez, y la complejidad temporal de mantener la cola es solo O (n)

Supongo que te gusta

Origin www.cnblogs.com/leafsblogowo/p/12687225.html
Recomendado
Clasificación