N. Суммы по остаткам
1000 мс · 256 МБ · всё или ничего
Дан массив . Два типа операций: прибавить число к одному элементу и узнать сумму всех , у которых индекс даёт остаток при делении на .
Здесь корневая работает не по индексам, а по величине шага. Заметим, что два случая устроены по-разному:
- шаг большой - индексов мало, их всего , и запрос можно честно просуммировать;
- шаг маленький - индексов много, зато самих маленьких шагов немного, и ответы можно держать готовыми.
Формат ввода
В первой строке - числа и ().
Во второй строке - чисел ().
В следующих строках - операции. «1 i v» - прибавить к (, ). «2 m r» - сумма по всем с (, ).
Индексы нумеруются с единицы. И значения в массиве, и ответы помещаются в 64-битный тип, но не в 32-битный: один элемент может собрать все прибавлений.
Формат вывода
Для каждого запроса второго типа выведите сумму в отдельной строке.
Примеры
ввод
5 5 1 2 3 4 5 2 2 0 2 2 1 1 3 10 2 2 1 2 5 0
вывод
6 9 19 5
ввод
6 3 1 1 1 1 1 1 2 3 0 2 6 1 2 1 0
вывод
2 1 6
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.