Estructura de datos - Fenwick árbol - Modificar un intervalo de evaluación intervalo de punto individual más -1750 y evaluación

04/03/2020 12:35:23

Descripción del problema:

Un número conocido de columnas, es necesario realizar las dos operaciones siguientes:
1. Un número de secciones cada uno más X
2. la obtención de un número de valor
entradas:
la matriz original es A. Por conveniencia, A [0] es 0. El número real de columnas de la A [1] aperturas.
Operación dada por la 4-tupla.
Para cada 4-tupla (a, b, c, d ):
Si a = 0 requiere un [b] -A valores [c] han aumentado D intervalo (modificado).
Si es necesario para dar un valor a = 1 A [b] a. En la que c, d inoperante (consulta).

Salida:
Para reducir la cantidad de datos de salida. 2 operación (consulta) Devuelve el valor de todo el O exclusivo (^).

muestra

Ejemplo 1:

输入:[0,1,2,3,4],[[1,1,0,0],[0,1,2,1],[1,2,0,0]]
输出:2
解释:
第一个操作返回A [1] = 1
第二个操作改变A为 [0,2,3,3,4]
第三个操作返回A [1] = 3
所以 1 ^ 3 = 2

Muestra 2:

输入:[0,1],[[1,1,0,0]]
输出:1
解释:第一个操作返回A [1] = 1,答案为 1。

precauciones

  • Secuencia de longitud <= 10,000
  • Operando <= 50,000

Resolución de problemas:

    int [] bit; 
    pública de largo intervalsAddAndGetValue (int [] A, int operaciones [] []) { 
        int n = a.length; 
        bit = new int [n]; 
        for (int i = 1; i <n; i ++) { 
            actualización (i, A [i]); 
            actualización (i + 1, -A [i]); 
        } 
        Largas res = 0; 
        for (int [] op: operaciones) { 
            si (op [0] == 0) { 
                actualización (op [1], op [3]); 
                actualización (op [2] + 1, -OP [3]); 
            } 
            Else { 
                res ^ = consulta (op [1]); 
            } 
        } 
        Res regresar; 
    } 
    
    Actualización private void (int idx, int delta) {
        for (int i = idx; i <bit.length; i + = (i y -i)) { 
            bit [i] + = delta; 
        } 
    } 
    
    Private int consulta (int idx) { 
        int res = 0; 
        for (int i = idx; i> 0; i - = (i y -i)) { 
            res + = bit [i]; 
        } 
        Res regresar; 
    }

  

 

Supongo que te gusta

Origin www.cnblogs.com/hyserendipity/p/12625785.html
Recomendado
Clasificación