Подскажите, как можно решить следующую задачу? Есть 10⁵ запросов вида

добавить строку в список, либо получить k - ый элемент списка при условии, что строки отсортированы. Ограничение 1250 мс.

16 ответов

8 просмотров

Ничего лучше дерева поиска для этой задачи, кажется нет

Дон Кинг
AVL?

Любое балансирующеся

Декартач с размерами поддеревьев для динамического поиска k-ой порядковой за log, если нужно быстро написать

Можно написать бор, он будет отвечать на каждый запрос за длину строки

Дон-Кинг Автор вопроса

Если k фиксированное, то можно кучу создать на к элементов) и нужный элемент всегда в вершине будет

Vladimir Mokeev
Если k фиксированное, то можно кучу создать на к э...

ну это должно быть хуже чем бор если строки за линию сравнивать

Albert
ну это должно быть хуже чем бор если строки за лин...

Ты прав. Не обратил внимание, что со строками работаем

будем поддерживать декартово дерево и сравнивать строки с помощью хэширования за log n, итого O(S + q log S log q), где S - суммарная длина строк

Albert
будем поддерживать декартово дерево и сравнивать с...

Можно делать встроенным сетом, переписав компаратор на свой

Albert
можно, да, только не встроенным, а из pb_ds

Да, забыл, что дефолтный сет не умеет обращаться к случайному элементу :(

Trie проще всего, с хранением количества потомков для каждого элемента. Тогда поиск и по элементу и по индексу log(n)

Vladimir Mokeev
Лог откуда?

Кажется у трие даже не лог, а длина ключа.

Похожие вопросы

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
Привет всем. Подскажите, как можно данную задачу более менее эффективно решить? В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарош...
Vitaliy
6
Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много раз подряд, после чего из ...
Αλeksandr
10
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Карта сайта