Дан массив. С ним можно делать операции 1) add <element>

<index> - добавляет элемент element на позицию index
2) get <index> - возвращает значение элемента на позиции index
(Индексация с нуля, а не с единицы)
Функция добавления не заменяет элемент на индексе, а "сдвигает" другие элементы.

приведу пример.
a = [1, 2, 3, 4, 5]
>>> add 10 3
a = [1, 2, 3, 10, 4, 5]
>>> index 3
<<< 10
При самом простом решение данной задачи можно создать массив, затем при добавлении элемента
смещать элементы друг за другом. Очевидно, что сложность алгоритма при больших размерах массива
зависит от операции add, т.к. подобное присвоение занимает O(n) времени, что чрезвычайно долго.
Хотелось бы, чтобы алгоритм успевал работать для любых 2* 10^5 запросов.
Т.е. сделать добавление и получение элемента хотя бы меньше чем за O(sqrt(n)). Желательно за O(log(N))

Назову эту структуру данных "добрым массивом". Как её реализовать?

Часть 2:
Уж не уверен, что это вообще возможно, но всё же...

Space O(N)
Search O(log(N))
Insert O(log(N))
Delete O(log(N))
Iterate All O(N)
push_back O(1) <- Average
pop_back O(1) <- Average
push_front O(1) <- Average
pop_front O(1) <- Average
Sort O(N * log (N))

3 ответов

21 просмотр

похоже на неявное дд

tiom4eg 🇷🇺
похоже на неявное дд

Операции, описанные в первой части, работают в среднем за лог, а вот во второй части я вообще не уверен, что все эти операции могут выполняться одновременно с такой асимптотикой. За лог их дд тоже умеет поддерживать, а за единицу вряд ли

Скиплист?

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

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

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