【Cola】|Cola monotónica|Cola de simulación|Creación de colas y uso relacionado

1. La definición básica y explicación de la cola.

Una cola es una estructura de datos simple. En primer lugar, podemos saber que una cola tiene dos operaciones: salida , entrada , y cuando almacenamos relaciones relacionadas, también necesitamos almacenar estructuras de datos relacionadas, por lo que debemos abrir una unidad de matriz. para almacenar elementos unitarios de esta cola. Luego, para completar esta operación básica de entrada y salida, podemos transformar esta estructura de datos en una estructura de datos de doble puntero.Establecemos un puntero en el nodo principal y el nodo final respectivamente para completar esta estructura de datos.

inserte la descripción de la imagen aquíLa cola simulada en la cola es una serie de operaciones que utilizamos en la matriz para simular la estructura de datos. Este tipo de operación es muy simple. En términos generales, lo que podemos hacer con la cola también se puede hacer con la cola simulada, por lo que solemos usar Los cálculos se realizan simulando una cola, y hay una cola monotónica. En primer lugar, debemos entender la idea de una cola monotónica. En primer lugar, la secuencia que almacena es una cola ordenada. Algunos valores "En toda la matriz no se puede tomar debido a ciertas circunstancias. De esta manera, podemos reducir el rango de datos muy bien. Usualmente hacemos este tipo cuando el rango de datos es relativamente pequeño, pero los datos son relativamente grandes. Usamos el método completo para completar la operación de reducción y adelgazamiento de datos.

En segundo lugar, la cola simulada

Como todos sabemos, la cola de simulación tiene varias operaciones básicas: ingresar a la cola , salir de la cola y juzgar si está vacía.

1, la creación de la cola
const int  N  = 100010 ; 

int q[N] , hh , tt = - 1 ;
2, la operación de eliminación de cola de la cola
tt ++ ;
3, operación de cola en cola
int x ;
cin >> x; 
q[++ tt] = x ;
4, la operación de juzgar si la cola está vacía
return tt < hh ; 

Tres, operación de cola monótona

1. Introducción al algoritmo

La aparición de colas monótonas es para resolver problemas similares a las ventanas deslizantes. Necesitamos resolver algunas operaciones de valor máximo en un área determinada. Esta área es un área más pequeña que el área más grande. En términos generales, esta área es constante, y en esta área En o en los datos, podemos saber que tiene una cierta relación de orden. Por el momento, expresaremos esta relación de datos en valor numérico como valor cnt . Almacenamos este valor en la cola en orden y generamos estos valores. cuando corresponda. .

2. Ideas de algoritmos

Conteo rápido: registre cuántos datos hay en el intervalo [n, m]: m - n + 1 puede completar el cálculo

  1. Lo primero en lo que debemos pensar es en cuánto dura la cola y cuándo debemos colocar los datos en la cabecera; generalmente usamos i - hh + 1 >= m (el número actual de dígitos es mayor o igual que la capacidad de la cola Valor máximo almacenado) al realizar esta operación
  2. Al mismo tiempo, lo que tenemos que considerar es cómo podemos asegurarnos de que los datos se almacenen de forma monótona; en general, nos aseguramos de que la cola no esté vacía hh <= tt y lo que debemos asegurarnos es que el valor cnt en el final de la cola no satisface la monotonicidad

3. Código normal

#include <iostream>
#include <algorithm>
using namespace std ;

const int N = 1000100 ;

int q[N] ,hh , tt = - 1 , g[N];

int main ()
{
    
    
    int n , m ; 
    cin >> n >> m ;
    for(int i = 0 ; i < n ; i ++ )
    {
    
    
        int x ;
        cin >> x ;
        g[i] =  x; 
      //  cout << i - q[hh] + 1 << endl ; 
        if(i - q[hh] + 1 > m)      hh ++ ;
        while(hh <= tt && x >= q[tt])   tt -- ;
        q[++ tt ] = i ;
        if(i >=  m - 1)     cout << g[q[hh]] << " ";  
    
}

    return 0 ;
}

Esta operación está relacionada con la operación de encontrar el valor máximo en la ventana deslizante. Lo que estamos viendo es una operación de cola monotónica simple para una comparación numérica perfecta. Puede tener una comprensión más profunda basada en el código.

También se realizarán suplementos relevantes cuando se encuentren preguntas relacionadas con la junta en el futuro
; —————————————

Supongo que te gusta

Origin blog.csdn.net/wen030803/article/details/131740613
Recomendado
Clasificación