Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- using namespace std;
- /**
- Se da un vector de n numere intregi.
- Sa se raspunda la m intrebari de forma:
- "care este suma elementelor de la pozitia i la pozitia j?".
- n=9
- vector: 3 4 -2 10 4 -5 2 -1 -1
- poz: 1 2 3 4 5 6 7 8 9
- (4, 8) ----> 10
- (8, 9) ----> -2
- Solutie 1: O(m*n)
- Faci for de fiecare data
- Solutie 2:
- Se construieste vectorul s de sume partiale, in care vom memora
- s[i] = suma primelor i elemente din vectorul a
- vector: 3 4 -2 10 4 -5 2 -1 -1
- poz: 1 2 3 4 5 6 7 8 9
- s: 3 7 5 15 19 14 16 15 14
- poz: 1 2 3 4 5 6 7 8 9
- (1, 7) ---> 16
- (i, j) ---> s[j] - s[i-1]
- Complexitate timp: O(n+m)
- Memorie auxiliara: O(n)
- */
- int a[100003];
- long long s[1000000];
- int main()
- {
- /**
- a[i]<1000000
- n<1000000
- s[n] =
- */
- int n,m,i;
- ifstream fin("date.in");
- ofstream fout("date.out");
- fin>>n;
- s[0] = 0;
- for(i=1;i<=n;++i)
- {
- fin>>a[i];
- s[i] = s[i-1] + a[i];
- }
- fin>>m;
- int st, dr;
- for(i=1;i<=m;++i)
- {
- fin>>st>>dr;
- fout<<s[dr] - s[st-1]<<"\n";
- }
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement