Sume și progresii

Time limit: 0.2s Memory limit: 64MB Input: sume_progresii.in Output: sume_progresii.out

Într-un univers paralel, Gigel este un olimpic intergalactic la informatică. El tocmai ce a învățat de la profesorul lui de matematică ce sunt progresiile aritmetice. Fiind curios din fire, el se întreabă cum poate folosi acest concept pentru a rezolva probleme de informatică. Astfel, el definește următoarele tipuri de operații pentru un șir de valori a1a_1, a2a_2, a3a_3, ... ana_n.

  1. Sumă pe interval: Dându-se două poziții ii și jj se calculează: S=ai+ai+1+ai+2+...+ajS = a_i + a_{i+1} + a_{i+2} + ... + a_j.
  2. Progresie pe interval: Dându-se două poziții ii și jj se calculează: P=1ai+2ai+1+3ai+2+...+(ji+1)ajP = 1 \cdot a_i + 2 \cdot a_{i+1} + 3 \cdot a_{i+2} + ... + (j - i + 1) \cdot a_j.

Cerință

Gigel vă provoacă să aplicați una dintre operațiile definite de el pentru mai multe intervale de poziții dintr-un șir dat. Puteți răspunde la toate interogările rapid și corect?

Date de intrare

Prima linie a fișierului de intrare sume_progresii.in va conține trei numere naturale CC, NN și QQ, unde CC reprezintă tipul de operație care trebuie aplicat, NN reprezintă lungimea șirului de valori, iar QQ reprezintă numărul de intervale pe care va trebui aplicată operația. Pe a doua linie se găsesc NN numere, reprezentând valorile numerelor din șir. Pe următoarele QQ linii vor apărea câte două valori ii și jj, capetele intervalului pe care se aplică operația.

Date de ieșire

În fișierul de ieșire sume_progresii.out se vor scrie QQ linii, unde pe linia ii se va afla rezultatul operației pentru al ii-lea interval.

Restricții și precizări

  • 1C21 \leq C \leq 2
  • 1N,Q1 000 0001 \leq N, Q \leq 1 \ 000 \ 000
  • Valorile elementelor din șir vor fi cuprinse între 00 și 1 000 0001 \ 000 \ 000.
  • Se garantează că 1ijN1 \leq i \leq j \leq N, oricare ar fi ii și jj capete de interval.
  • Pentru 20 de puncte, C=1C = 1 și 1N,Q1 0001 \leq N, Q \leq 1 \ 000
  • Pentru alte 20 de puncte, C=1C = 1 și 1N,Q1 000 0001 \leq N, Q \leq 1 \ 000 \ 000
  • Pentru alte 20 de puncte, C=2C = 2 și 1N,Q1 0001 \leq N, Q \leq 1 \ 000
  • Pentru alte 40 de puncte, C=2C = 2 și 1N,Q1 000 0001 \leq N, Q \leq 1 \ 000 \ 000

Exemplul 1

sume_progresii.in

1 5 4
15 23 41 22 9
1 1
2 3
1 5
3 5

sume_progresii.out

15
64
110
72

Explicație

Tipul de operație cerut este de sumă pe interval. Astfel, S1=15S_1 = 15, S2=23+41=64S_2 = 23 + 41 = 64, S3=15+23+41+22+9=110S_3 = 15 + 23 + 41 + 22 + 9 = 110 și S4=41+22+9=72S_4 = 41 + 22 + 9 = 72.

Exemplul 2

sume_progresii.in

2 5 4
15 23 41 22 9
1 1
2 3
1 5
3 5

sume_progresii.out

15
105
317
112

Explicație

Tipul de operație cerut este de progresie pe interval. Astfel, P1=115=15P_1 = 1 \cdot 15 = 15, P2=123+241=23+82=105P_2 = 1 \cdot 23 + 2 \cdot 41 = 23 + 82 = 105, P3=115+223+341+422+59=15+46+123+88+45=317P_3 = 1 \cdot 15 + 2 \cdot 23 + 3 \cdot 41 + 4 \cdot 22 + 5 \cdot 9 = 15 + 46 + 123 + 88 + 45 = 317 și P4=141+222+39=41+44+27=112P_4 = 1 \cdot 41 + 2 \cdot 22 + 3 \cdot 9 = 41 + 44 + 27 = 112.

Log in or sign up to be able to send submissions!