EduBrick

N. Суммы по остаткам

1000 мс · 256 МБ · всё или ничего

Дан массив a1,…,ana_1, \ldots, a_n. Два типа операций: прибавить число к одному элементу и узнать сумму всех aia_i, у которых индекс даёт остаток rr при делении на mm.

Здесь корневая работает не по индексам, а по величине шага. Заметим, что два случая устроены по-разному:

  • шаг mm большой - индексов r,r+m,r+2m,…r, r + m, r + 2m, \ldots мало, их всего n/mn / m, и запрос можно честно просуммировать;
  • шаг mm маленький - индексов много, зато самих маленьких шагов немного, и ответы можно держать готовыми.

Формат ввода

В первой строке - числа nn и qq (1≤n,q≤1051 \le n, q \le 10^5).

Во второй строке - nn чисел aia_i (∣ai∣≤109|a_i| \le 10^9).

В следующих qq строках - операции. «1 i v» - прибавить vv к aia_i (1≤i≤n1 \le i \le n, ∣v∣≤104|v| \le 10^4). «2 m r» - сумма aia_i по всем ii с i mod m=ri \bmod m = r (1≤m≤n1 \le m \le n, 0≤r<m0 \le r < m).

Индексы нумеруются с единицы. И значения в массиве, и ответы помещаются в 64-битный тип, но не в 32-битный: один элемент может собрать все 10510^5 прибавлений.

Формат вывода

Для каждого запроса второго типа выведите сумму в отдельной строке.

Примеры

ввод
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
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.