2014-12-15 2 views
3

(Хорошо, так что мой предыдущий вопрос находится на удержании, как слишком широк, поэтому я сузив его здесь.)Внедрение специализированных структур данных в современном C++

Я ищу, чтобы принять участие в алгоритмических соревнованиях по программированию , и множество проблем зависит от использования специализированных структур данных, которые очень хороши при определенной операции - например, деревья Фенвика позволяют вычислять префиксные суммы списка значений в логарифмическом времени.

Что такое предпочтительный способ реализации таких структур данных в современных C++ (т. Е. С использованием возможностей C++ 11)? Можно ли использовать STL-алгоритмы и контейнеры вместо того, чтобы писать struct и кодировать каждую операцию вручную?

Я ищу деревья Фенвика, деревья сегментов, treaps и некоторые другие структуры данных, часто полезные в конкурсах в стиле IOI, но общих стратегий более чем достаточно.

+2

Почему вы уделяете особое внимание современным C++? Какую новую конструкцию языка или стандартное расширение библиотеки вы имеете в виду, что могло бы иметь значение? –

+0

@PeterSchneider Возможно, я ошибаюсь, но насколько я знаю, C++ 11 представляет много новых алгоритмов STL, которые облегчают некоторые вещи, такие как [некоторые показаны здесь] (http://stackoverflow.com/questions/24650626/как к орудию-классик-сортировочный-алгоритмы-в-современной-C). –

+0

@PeterSchneider моя точка зрения заключалась в том, что ответы должны предпочтительно использовать все, что предлагает C++ 11. –

ответ

2

есть реализация в Фенвик дерево здесь: http://www.algorithmist.com/index.php/Fenwick_tree

Он использует зЬй :: вектор в качестве базового контейнера. , возможно, метод increase может быть записан в терминах std::transform или std::foreach.

+0

Спасибо; это именно то, что я искал. –

Смежные вопросы