¿Alguna vez tiene que programar sus propias estructuras de datos para una programación competitiva?

Hay muchas estructuras de datos para las cuales la implementación de STL no está fácilmente disponible.

Considere los gráficos, por ejemplo. Por lo general, no puede utilizar bibliotecas como Boost, Lemon, etc. para algoritmos relacionados con gráficos. Debe codificarlo y los detalles de implementación pueden variar según el problema. Por lo general, se implementa como una matriz de vectores.

Considere el ejemplo de los árboles de segmentos que se utiliza para una variedad de consultas de rango. Necesita codificar eso usted mismo. Lo mismo ocurre con otra hermosa estructura de datos llamada Fenwick tree o Binary Indexed Trees (BIT).

¿Has oído hablar de estructuras de datos relacionadas con cadenas? Trie, árboles de sufijos, autómata de sufijos, matriz de sufijos, árbol palindrómico, autómata Aho Corasick? Todos los usan mucho los programadores competitivos.

Hay casos en los que necesita una versión modificada de árboles de búsqueda binarios balanceados. La implementación del árbol rojo negro lleva demasiado tiempo. Se utiliza el tratamiento que no está disponible en la biblioteca estándar. Hay otro estrechamente asociado con él y se llama treap implícito, que puede considerarse como una versión dinámica de la matriz que permite la inserción en el medio. Había leído que GNU C ++ tiene algo llamado estructuras de datos basadas en políticas que incluyen una implementación de árboles de despliegue.

Luego viene la geometría computacional, que es una pesadilla para muchos programadores competitivos. Tienes que codificarlos por tu cuenta.

Entonces la respuesta a su pregunta es sí. Debería poder codificar muchas estructuras de datos y algoritmos, ajustarlos según la especificación del problema. Pero no te preocupes. En ACM ICPC puede llevar material impreso (aunque limitado).

¿Alguna vez tiene que programar sus propias estructuras de datos para una programación competitiva?

Creo que deberías seguir la respuesta dada por Suchith J N. él ha explicado todo.

Gracias

Sí, solía

Tenía plantillas para árbol de segmentos, árbol AVL, BIT, BFS, clasificación topológica, trie, árbol sufi y algunas más, pero con el uso cada vez mayor de C ++ STL no sentí la necesidad de bibliotecas DS hechas a mano.

Pero la mitad de los anteriores no están en STL en absoluto, por lo que necesitaría mantenerlos, pero si hay una alternativa STL, siempre preferiría usar el STL. Una vez dicho esto, las implementaciones de STL son de naturaleza más genérica, lo que puede ser un poco lento , si está seguro del rango del conjunto de datos, puede codificar sus propias bibliotecas para esa pequeña mejora de rendimiento.

Y en lo que respecta a ACM-ICPC, no existe una regla que especifique que no habrá ningún problema dado que se requeriría cualquier DS que no esté disponible en STL, si encuentra tales problemas, es mejor centrarse en otros problemas antes moviéndose a este.