Necesita tres datos por nodo:
- el bloque contiguo máximo de elementos iguales: necesitamos el valor que tienen estos elementos y el recuento. Por lo tanto, dos enteros.
- el elemento más a la izquierda ‘L’ de un segmento, y el bloque contiguo máximo a partir del extremo izquierdo que tiene el valor ‘L’: necesitamos el valor que tienen estos elementos, y la cuenta. Por lo tanto, dos enteros.
- el elemento más a la derecha ‘R’ de un segmento, y el bloque contiguo máximo que termina en el extremo derecho tiene el valor ‘R’: necesitamos el valor que tienen estos elementos, y el conteo. Por lo tanto, dos enteros.
Digamos que necesitamos consultar un rango [2,7] cuando la longitud de la matriz de entrada = 8.
Por lo tanto, el árbol de segmentos consultará estos segmentos: [2,2] + [3,4] + [5,6] + [7,7]. Puede dibujar un árbol de segmentos para la longitud de entrada n = 8, y verificar esto.
- ¿Es posible codificar un programa que, dada una secuencia finita, encuentra al menos 2 reglas posibles que generan las series restantes?
- ¿Cuáles son los buenos canales en YouTube para aprender algoritmos y estructuras de datos para la preparación de Google Code Jam o Facebook Hacker Cup?
- ¿Cuáles son los algoritmos actuales de aprendizaje profundo para la restauración de imágenes?
- Cómo mostrar un problema es NP completo
- ¿Qué es el recorrido NAT y por qué debería usarlo?
Entonces, cuando combinamos los resultados de dos segmentos consecutivos como [2,2] + [3,4], [3,4] + [5,6], etc., podemos obtener el máximo de estos:
- El máximo de información # 1 en ambos segmentos.
- El resultado combinado de la información n. ° 3 del segmento izquierdo y la información n. ° 2 del segmento derecho. Si el valor del elemento con el que termina el segmento izquierdo == el valor del elemento con el que comienza el segmento derecho, entonces podemos devolver el recuento agregado.