# PBinfo #3796 – qtsume – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerința
Se dă un vector A cu N numere naturale. Pentru Q întrebări de forma (x, y) aflați rezultatul sumei A[x] + 2 * A[x + 1] + ... + (y - x + 1) * A[y].

Date de intrare
Fișierul de intrare qtsume.in conține pe prima linie numărul N, iar pe a doua linie N numere naturale separate prin spații, reprezentând vectorul A. Pe următoarea linie se află numărul Q. Urmează Q linii, pe fiecare linie se află două numere naturale separate printr-un spațiu reprezentând x și y.

Date de ieșire
Fișierul de ieșire qtsume.out va conține pe Q linii, pe linia i aflându-se răspunsul la a i-a întrebare în ordinea citirii.

Restricții și precizări

1 ≤ N, Q ≤ 100.000
1 ≤ A[i] ≤ 1.000.000
1 ≤ x ≤ y ≤ N

Exemplu:
qtsume.in

5
3 1 2 3 5
3
1 2
1 5
2 4
qtsume.out

5
48
14
Explicație
Pentru a 3-a întrebare avem A[2] + 2 * A[3] + 3 * A[4] = 1 + 2 * 2 + 3 * 3 = 14

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
#define N_MAX 100005
using namespace std;
ifstream fin("qtsume.in");
ofstream fout("qtsume.out");
int N, Q;
int x, y;
long long A[N_MAX], S[N_MAX];
int main()
{
    fin >> N;
    for(int i = 1; i <= N; i++) {
        fin >> A[i];
        S[i] = S[i - 1] + i * A[i];
        A[i] += A[i - 1];
    }
    for(fin >> Q; Q; Q--) {
        fin >> x >> y;
        fout << S[y] - S[x - 1] - (x - 1) * (A[y] - A[x - 1]) << "\n";
    }
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3796)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3796/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3796/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
