Префиксные суммы




Пусть имеется некоторый массив. При отсутствии изменений мы можем быстро (быстрее, чем за линию) находить значение некоторых функций на подотрезке данного массива. Для этого нам необходимо использовать дополнительную память и сделать предподсчет.
Например, нам необходимо быстро находить сумму на некотором отрезке массива.
Заведем массив префиксных сумм, в котором по индексу i будет сумма всех элементов массива с индексами меньшими либо равными i.
a[] – данный массив, p[] – массив префиксных сумм


Подсчет массива p:
Очевидно p[0] = a[0]. Заметим, что мы легко можем пересчитать значение p[i] через p[i – 1], т.к. сумма на префиксе i это сумма на префиксе i – 1 + a[i].
Таким образом, код подсчета префиксных сумм выглядит следующим образом:

int a[n], p[n];
p[0] = a[0];
for (int i = 1; i < n; i++)
         p[i] = p[i - 1] + a[i];

Далее заметим, что сумма на отрезке – разница двух сумм на префиксе.


Зеленый = красный – синий
Таким образом, если необходимо найти сумму на отрезке [l,r], то ответ равен p[r] – p[l-1].
Однако, если l – 1 элемента может не существовать. Для того, чтобы обойтись без if’ов можно ввести 1-индексацию, а в a[0] и p[0] будут нейтральные значения (0 для суммы).
 
Заметим, что данный прием является частным случаем формулы включений-исключений, поэтому данным образом возможно хранить не только суммы, но и другие функции, например, умножения и xor.

Task
Time limit: 1500 ms,
Memory limit: 256 Mb

Дан неизменяемый массив длины n и q запросов типа “вычислить сумму подотрезка массива с l по r”. Выведите ответ на каждый запрос.

Входные данные:

В первой строке дано число n – размер массива (1 <= n <= 10^5).
Во второй строке дано n чисел – элементы массива. Числа по модулю не превосходят 10^9.
В третьей строке дано число q – кол-во запросов ( 1 <= q <= 10^5).
Далее дано q строк, в каждой из которых дано 2 числа: l и r (1 <= l <= r <= n).

Выходные данные:
Выведите ответы на все запросы, каждый в отдельной строке.

Ввод Вывод
5
1 2 3 4 5
3
1 2
3 3
2 5
3
3
14

(с) Курбатов Е., 2018

Auto CHOOSE THE PROGRAMMING NECESSARY LANGUAGE!
Attach the program source file:
or enter the source code in the language:

Rules for designing programs and a list of errors during automatic task verification
           

Results: