[Estructura de datos de aprendizaje] bloque y el árbol de Fenwick

Partición y el árbol Fenwick todos tienen importantes aplicaciones en el problema de intervalo

emm bloque de matriz no es tan eficiente como el árbol, pero la idea de la señorita comparar

Dicho primer bloque:

La secuencia de información se divide en un número n de sqrt (n) bloques, cada bloque de datos de pre-aceleran la consulta de información subsiguiente sección

La primera pieza de código:

const  int maxN = 5E5 + 50 ;
int suma [maxN], un [maxN], l [maxN], r [maxN], pertenecen [maxN];
int bloque, num; 

void build () { 
    bloque = sqrt (n); 
    num = n / bloque; si (n bloque%) num ++ ;
    para ( int i = 1 ; i <= num; i ++ ) 
        l [i] = (i- 1 ) * bloque + 1 , r [i] = i * bloque; 
    r [num] = n; 

    para ( int i = 1 ; i <= num; i ++ ) {
        para ( int j = l [i]; j <= r [i]; j ++ ) 
            pertenecen [j] = i, sum [i] + = a [j]; 
    } 
}

código variable global requiere el procesamiento previo de estos son: suma [i] denota el i-ésimo bloque y los datos (o exclusivos y también ser un producto de este tipo, lo mismo)

a [i] para el i-ésimo de datos, l [i], r [i], respectivamente, sobre el i-ésimo punto final índice de bloques, pertenecen bloque [i] pertenece a la i-ésima de almacenamiento

Después del pretratamiento, marcado con un solo punto de modificación / actualización y consulta la sección de código:

inline void actualización ( int x, int y) { 
    a [x] + = y; 
    suma [pertenecen [x]] + = y; 
} 

Inline int consulta ( int x, int y) {
     int ans = 0 ;
    si (pertenecen [x] == pertenecen [y]) {
         para ( int i = x; i <= y; i ++ ) 
            ans + = a [i];
        volver ans; 
    } 
    Para ( int i = x; i <= r [pertenecen [x]]; i ++ )
        ans + = a [i];
    para ( int i = pertenecen [x] + 1 ; i <pertenecen [y]; i ++ ) 
        ans + = suma [i];
    para ( int i = l [pertenecen [y]]; i <= y; i ++ ) 
        ans + = a [i];
    volver ans; 
}

En el que las actualizaciones de datos punto de matriz individuales a un cambio en los datos, entonces la suma de los subíndices x bloque pertenece a aumentar y

Y el intervalo de consulta [x, y], y, el bloque de la violencia que aquí se resume

1. Cuando x, y cuando el mismo bloque, suma que atraviesa

2. Cuando x, y no está en el mismo bloque, desplazamiento x a x suma bloque pertenece a un límite derecho, además de suma [x + 1] a la suma [y-1], y luego sumando y atraviesan el borde izquierdo del bloque pertenece a y

Son el tiempo de complejidad O (sqrt (n)) modificado para un único punto O (1)

 

qwq primero escribió esto, Fenwick árbol de nuevo mañana a Resumen de escritura

Supongo que te gusta

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