Здравствуй, сообщество CodeForces!
Иногда бывает так, что удобнее было бы, если бы мы имели возможность обращаться к элементам массива, которые имеют отрицательный индекс. Распространенное решение — узнать минимальный возможный индекс (mn), максимальный возможный индекс (mx) и создать массив размером abs(mn) + mx + 1. В таком случае обращение к -1 элементу превращается в обращение к -1 + abs(mn) элементу. Этот подход имеет несколько недостатков: легко забыть дописать + abs(mn) при обращении к массиву, тяжелее дебагать, код становится громоздким.
Решая задачу с последнего контесте (383D - Antimatter), я придумал похожее, но более удобное решение (в этой задаче нужно было обращаться к отрицательной сумме в динамике). Допустим, вам необходим массив, индексы которого лежат в промежутке [mn; mx] и mn < 0. Заведем массив mem[mx + abs(mn) + 1] и int* dp. В начале программы проинициализируем dp = mem + abs(mn). Готово! Можно обращаться к dp по отрицательным индексам в промежутке [mn, 0).
Пример использования 5771473.
А теперь вопросы:
1) Бояниста ли идея? Существуют ли другие пути обратиться к отрицательному индексу массива?
2) Есть ли подводные камни у этого метода? Чем это может быть плохо?
На этом все, спасибо за внимание.







