Programación competitiva: ¿Se pueden resolver todos los problemas de Fenwick Tree con Segment Tree?

No exactamente.

Por un lado, puede reemplazar el árbol de Fenwick con un árbol de segmentos y lograr la misma complejidad, mientras que no siempre puede reemplazar el árbol de segmentos con el árbol de Fenwick, porque el árbol de segmentos es un instrumento más poderoso que admite más operaciones diferentes.

Por otro lado, en la programación competitiva es posible que no pueda sustituir la solución de árbol Fenwick con un árbol de segmento y obtener AC. La constante oculta detrás del árbol de segmentos es mucho más alta, también requiere más memoria. Por lo tanto, es posible que su solución de CA obtenga TL / ML cuando intente implementarla con el árbol de segmentos. En algunos casos, significa que la parte restante de la solución no es lo suficientemente óptima (es decir, todavía es posible obtener AC con el árbol de segmentos en caso de que implemente todo con cuidado), en otros casos verá editorial con “no queremos ver que las soluciones de árbol de segmentos obtenían AC y el límite de tiempo era tan estrictamente intencional “ .

¿Se puede hacer * SÍ *
Cómo lo hacemos, pasando el punto final del intervalo como N.

Debe hacerse * NO *

¿Por qué no debería?
1.) La longitud del código es más para el árbol de segmentos, y la propagación diferida es imprescindible para que la actualización del rango sea estrictamente log N porque deberá actualizar hasta el final considerando que está resolviendo un problema BIT.

2.) Sobrecarga recursiva para árbol de segmentos

3.) Incluso si utiliza el árbol de segmentos iterativo, el espacio de la pila será el mismo y se compensará con bucles de actualización en la segunda variante iterativa.

Eso también siempre que conozca la variante iterativa. Es más duro que el recursivo.

4.) Deja una mala impresión

Chao 🙂

More Interesting

¿Qué tipo de algoritmo de localización utilizan generalmente los misiles de crucero?

¿Cuál es el mejor algoritmo para sumar números en matrices anidadas?

¿Cuál es la conclusión del algoritmo de Dijkstra?

No puedo desempeñarme bien en los concursos de programación, incluso después de practicar mucho. ¿Qué debería hacer ahora? ¿Debo dejar de hacer programación competitiva?

¿Cuáles son los algoritmos posibles que se pueden usar para ordenar cada cubo en el algoritmo de clasificación de cubo?

¿Cuáles son todas las estructuras de datos que conoce? ¿Cuál de estos usas con frecuencia? Agrúpelos en "Básico" y "Avanzado".

¿Cuál es el elemento más pequeño / más grande en el código Java?

Mientras codifica problemas algorítmicos durante una entrevista usando C, ¿está bien asumir funciones de biblioteca?

¿Cuál es la complejidad temporal del algoritmo de búsqueda binaria?

¿Cuál es el mejor algoritmo para la optimización convexa sin restricciones de propósito general?

Dado un gráfico con vértices 2N de modo que existan dos vértices P y Q, con cada ruta de P a Q que contenga al menos N + 1 bordes, ¿cuál es el número mínimo de vértices que debemos eliminar para desconectar P y Q?

¿Por qué necesito el complemento de un gráfico?

En el juego de conkers, ¿cómo diseñarías un experimento para identificar qué conkers son mejores?

¿Cuál es el algoritmo más genial (programación competitiva) que hayas encontrado?

¿Cuánto trabaja un analista de datos / científico de datos en un día? ¿Cuánto tiempo tienes para estudiar nuevos algoritmos y técnicas?