Задание 8. Запросы на отрезках (RSQ/RMQ)

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

Дана последовательность чисел A=[a1,a2,...,an]A = [a_1, a_2, ..., a_n]. Нужно найти сумму S(i,j)S(i,j) чисел на отрезке от ii до jj включительно: S(i,j)=k=ijak S(i,j) = \sum_{k=i}^{j}{a_k}.

Используйте алгоритм префиксных сумм. Трудоемоксть вычисления суммы должна быть O(1)O(1).

Вход

В первой строке число NN (1N1051 \le N \le 10^5 ) — количество элементов в массиве AA. В следующей строке записано NN чисел через пробел — элементы aia_i (128ai<127 -128 \le a_i < 127) массива AA. В следующих KK (1K107 1 \le K \le 10^7) строках идут запросы: числа ii и jj, чтобы вычислить сумму S(i,j)S(i,j).

Выход

KK строк, в каждой их которых одно число — результат вычисления суммы на отрезке S(i,j)S(i,j).

Пример

Вход

10
1 4 3 -6 2 6 -8 2 3 5
0 9
2 4
3 7
4 4

Выход

12
-1
-4
2

8.2 Дерево отрезков для минимумов

Дана последовательность чисел A=[a1,a2,...,an]A = [a_1, a_2, ..., a_n]. Нужно найти минимум M(i,j)M(i,j) чисел на отрезке от ii до jj: M(i,j)=minik<jakM(i,j) = \min_{i \le k < j}{a_k}.

Используйте структуру данных дерево отрезков. Поиск минимума должен быть O(log(n))O(log(n))

Вход

В первой строке число NN (1N1051 \le N \le 10^5 ) — количество элементов в массиве AA. В следующей строке записано NN чисел через пробел — элементы aia_i (107ai107-10^7 \le a_i \le 10^7) массива AA. В следующих KK (1K1071 \le K \le 10^7) строках идут запросы: числа ii и jj, чтобы вычислить минимум M(i,j)M(i,j).

Выход

KK строк, в каждой их которых одно число — результат вычисления минимума на отрезке M(i,j)M(i,j).

Пример

Вход

10
1 4 3 -6 2 6 -8 2 3 5
0 9
2 4
4 5
0 3
7 10

Выход

-8
-6
2
1
2