Î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 , , , ... .
- Sumă pe interval: Dându-se două poziții și se calculează: .
- Progresie pe interval: Dându-se două poziții și se calculează: .
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 , și , unde reprezintă tipul de operație care trebuie aplicat, reprezintă lungimea șirului de valori, iar reprezintă numărul de intervale pe care va trebui aplicată operația. Pe a doua linie se găsesc numere, reprezentând valorile numerelor din șir. Pe următoarele linii vor apărea câte două valori și , capetele intervalului pe care se aplică operația.
Date de ieșire
În fișierul de ieșire sume_progresii.out se vor scrie linii, unde pe linia se va afla rezultatul operației pentru al -lea interval.
Restricții și precizări
- Valorile elementelor din șir vor fi cuprinse între și .
- Se garantează că , oricare ar fi și capete de interval.
- Pentru 20 de puncte, și
- Pentru alte 20 de puncte, și
- Pentru alte 20 de puncte, și
- Pentru alte 40 de puncte, și
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, , , și .
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, , , și .