У нас есть несколько товаров и последовательность событий: сделать что-то сложное с запасом товара (не просто добавить/отдать X, а, например, посчитать, сколько есть товара и в результате запустить производство) и получить результат.
Каждое событие работает ровно с одним товаром.
Парочку событий мы меняем, а затем запускаем всю цепочку, чтобы посмотреть, что вышло.
Как сделать кэш длины O(n), чтобы можно было запустить алгоритм просчёта результата с i-го события, а не с самого начала?
Пока вижу такой способ закэшировать динамику запасов. Вместе с каждым событием держим двойной кэш.
1. Товары по очереди (0, 1, 2, 0, 1, 2…)
2. Тот товар, который задействован в событии.
Тогда, прочитав m старых событий, можно восстановить полный запас всего на любой момент.