Модуль: Корневая декомпозиция


Задача

1 /6


Сумма на отрезке - 1

Теория Нажмите, чтобы прочитать/скрыть


У нас есть задача, о том как быстро считать суммы на отрезке l...r в статичном массиве a за асимптотику меньшую, чем O(n).
Разделим массив a на k блоков одинакового размера и предварительно посчитаем для каждого из них сумму элементов.
Теперь, отвечая на запрос, можно пройтись по элементам массива a и прибавить их к результату, также если один из блоков лежит внутри отрезка, то мы можем прибавить его сумму к результату и пропустить элементы этого блока.
Максимальное количество операций на запрос при таком алгоритме равно n / k + k, следовательно оптимальное k равно квадратному корню из n.
 

Задача

Дан массив a длины n (\(1 <= n <= 2 \cdot 10^6\), \(1 <= a_i <= 10^9\)). Также даны m (\(1 <= m <= 500\)) запросов вида l, r (\(1 <= l <= r <= n\)).

На каждый запрос нужно вывести сумму чисел на отрезке от l до r включительно. Элементы нумеруются с 1 до n.

 

Примеры
Входные данные Выходные данные
1
4
1 2 3 4
2
1 4
1 1
10
1
2
5
5 5 5 5 5
1
5 5
5

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w6410
Комментарий учителя