Как насчет использования отсортированного массива с двоичным поиском?
Вставка и удаление происходит медленно. но, учитывая тот факт, что данные представляют собой простые целые числа, их можно оптимизировать с помощью вызовов memcpy (), если вы используете C или C ++. Если вы знаете максимальный размер массива, вы можете даже избежать выделения памяти во время использования массива, поскольку вы можете предварительно выделить его до максимального размера.
«Лучший» подход зависит от того, сколько предметов вам нужно хранить и как часто вам нужно будет вставлять / удалять по сравнению с поиском. Если вы редко вставляете или удаляете отсортированный массив с O (1), доступ к значениям, безусловно, будет лучше, но если вы часто вставляете и удаляете вещи, двоичное дерево может быть лучше, чем массив. При достаточно малом n массив, скорее всего, превосходит дерево в любом случае.
Если размер хранилища имеет значение, массив также лучше, чем деревья. Деревьям также необходимо выделять память для каждого элемента, который они хранят, и накладные расходы на выделение памяти могут быть значительными, поскольку вы храните только небольшие значения (целые числа).
Вы можете захотеть профилировать то, что быстрее, копирование целых чисел, если вы вставляете / удаляете из отсортированного массива или дерева с его выделением памяти (де).