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; }