Я работаю над проблемой программирования и сталкиваюсь с препятствиями. Я пытаюсь придумать структуру данных, чтобы сопоставить произвольное целое число с другим целым числом. Вы можете быть склонны сказать "Хеш-таблица!" или «Дерево поиска!», и я действительно подумал об этом (и даже попробовал грязную реализацию). Но есть одна загвоздка!
Каждый раз, когда я вставляю или удаляю значение из сопоставления, я хочу также увеличивать / уменьшать (на одно или несколько произвольных смещений) все значения, которые больше или равны введенному / удаленному значению.
Вот пример.
Скажем, у меня есть два списка целых чисел, которые я буду использовать для своих ключей и значений на этой карте:
Keys: (1, 6, 18, 21, 24)
Vals: (2, 1, 3, 0, 4)
Теперь, если я добавлю пару ключ-значение (7, 1), я хочу увеличить все значения, большие или равные 1, что приведет к следующему:
Keys: (1, 6, 7, 18, 21, 24)
Vals: (3, 2, 1, 4, 0, 5)
И впоследствии, если я удалю пару ключ-значение (21, 0), это будет результат:
Keys: (1, 6, 7, 18, 24)
Vals: (2, 1, 0, 3, 4)
Это довольно тривиально сделать с парой списков / массивов и некоторой обработкой после каждой вставки / удаления (то есть, просматривая значения и меняя их по одному).
Но я ищу способ сделать это более эффективно, возможно, без необходимости просматривать весь список значений и увеличивать / уменьшать их. Возможно, даже задерживая увеличение / уменьшение до тех пор, пока не будет запрошено значение (которое должно было быть увеличено / уменьшено).
Есть мысли?