Оптимізація алгоритму
Обмеження: 4 сек., 512 МіБ
Школяре, ти вмієш оптимізовувати алгоритми?
Тобі задано алгоритм, який для заданого масиву aa з nn цілих чисел обчислює на проміжку a[l…r]a[l…r] деяке значення.
Ось псевдокод функції ff, яка реалізовує алгоритм:
У циклі for змінні ii та jj перебирають значення від ll до rr включно. У псевдокоді умова (i+j)%2=0(i+j)%2=0 перевіряє, чи (i+j)(i+j) — парне.
Цей алгоритм написаний неоптимально. Твоє завдання — оптимізувати його.
Тобі заданий масив aa з nn цілих чисел.
Ти повинен опрацювати таких qq запитів.
l rl r — обчислити значення функції f(n,a,l,r)f(n,a,l,r).
Зауваж, що якщо ти реалізуєш алгоритм так, як у псевдокоді, ти не набереш повний бал — тобі потрібно реалізувати його оптимально.
Вхідні дані
У першому рядку записано ціле число nn — кількість елементів у масиві.
У другому рядку задано nn цілих чисел aiai — елементи масиву.
У третьому рядку задано ціле число qq — кількість запитів.
У наступних qq рядках задано по два цілі числа ll, rr — межі проміжку в запиті.
Вихідні дані
У qq рядках виведи відповіді на всі запити.
Обмеження
1≤n,q≤3⋅1051≤n,q≤3⋅105,
1≤li≤ri≤n1≤li≤ri≤n,
1≤ai≤1091≤ai≤109.
Оцінювання складається з таких блоків:
по 1 балу за кожен приклад з умови,
7 балів: q=1q=1, li=1,ri=nli=1,ri=n, nn — парне,
13 балів: q=1q=1, li=1,ri=nli=1,ri=n, n≤3⋅103n≤3⋅103, ai≤103ai≤103,
10 балів: q=1q=1, li=1,ri=nli=1,ri=n, n≤3⋅103n≤3⋅103, ai≤109ai≤109,
26 балів: q=1q=1, li=1,ri=nli=1,ri=n, n≤3⋅105n≤3⋅105, ai≤103ai≤103,
20 балів: q=1q=1, li=1,ri=nli=1,ri=n, n≤3⋅105n≤3⋅105, ai≤109ai≤109,
5 балів: q=1q=1, n≤3⋅105n≤3⋅105, ai≤109ai≤109,
17 балів: без додаткових обмежень.
Приклади
Вхідні дані (stdin) | Вихідні дані (stdout) |
---|---|
4 1 2 3 4 2 1 4 2 4 | 0 6 |
Вхідні дані (stdin) | Вихідні дані (stdout) |
---|---|
5 4 7 4 7 4 1 1 5 | -4 |
Примітки
Формула, яку реалізовує алгоритм:
s=r∑i=lr∑j=l(−1)i+j⋅(ai+aj).s=r∑i=lr∑j=l(−1)i+j⋅(ai+aj).
Перший приклад:
f(n,a[1…n],1,4)=2−3+4−5−3+4−5+6+4−5+6−7−5+6−7+8=0f(n,a[1…n],1,4)=2−3+4−5−3+4−5+6+4−5+6−7−5+6−7+8=0,
f(n,a[1…n],2,4)=4−5+6−5+6−7+6−7+8=6f(n,a[1…n],2,4)=4−5+6−5+6−7+6−7+8=6.