Блог пользователя Obk

Автор Obk, история, 6 лет назад, По-русски

Подскажите структуру данных(В этой структуре в некотором виде хранится список целых чисел (числа могут повторяться, априори порядок неважен)), для которой будут эффективно выполняться следующие операции:

1) Добавление нового элемента

2) Удаление элемента с данным значением (не по индексу)

3) Поиск минимального, максимального элемента

4) Поиск медианного элемента

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Автокомментарий: текст был обновлен пользователем Obk (предыдущая версия, новая версия, сравнить).

»
6 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Декартово дерево.

UPD: Ещё можно это: C++ STL: Policy based data structures

»
6 лет назад, # |
Rev. 3   Проголосовать: нравится +1 Проголосовать: не нравится

Если все запросы известны заранее, то дерево отрезков / дерево фенвика / sqrt-декомпозиция. Последняя часто применяется в алгоритме Мо, так как добавление в эту структуру данных осуществляется за O(1), а ответ на запросы за корень.

Если запросы не известны заранее, то дерево фенвика на хеш-таблице, динамическое дерево отрезков.

Альтернативы: декартово дерево, sqrt-list (работает, обычно, в два раза медленнее декартового на ограничениях порядка 300к). (Правда, sqrt-list может обгонять декартово дерево для примитивных типов в два раза при оптимизациях компилятора в виде векторизации, так как все данные лежат последовательно).

Также в некоторых реализациях стандартной библиотеки C++ есть структура данных под такие запросы, называется дерево статистик. Также там есть несколько других полезных структур данных. Мануал.

»
6 лет назад, # |
  Проголосовать: нравится +56 Проголосовать: не нравится

Вполне хватит двух multiset'ов. Поддерживаем инвариант, что первый multiset хранит N / 2⌉ минимальных элементов, второй — N / 2⌋ максимальных.

»
6 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Тупые структуры данных как же я вас блин ненавижу

»
6 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

бор (префиксное дерево)