316
Cerința
Se dă un șir cu n
elemente numere întregi, numerotate de la 1
la n
și m
perechi de indici i j
. Pentru fiecare pereche de indici se calculează suma elementelor din secvență determinată de cei doi indici. Afișați suma maximă obținută.
Date de intrare
Programul citește de la tastatură numărul n
, iar apoi n
numere întregi, apoi m
și m
perechi i j
.
Date de ieșire
Programul va afișa pe ecran numărul S
, reprezentând suma maximă determinată.
Restricții și precizări
1 ≤ n ≤ 100.000
;1 ≤ m ≤ 500.000
;1 ≤ i,j ≤ n
;- cele
n
elemente ale șirului vor avea cel mult nouă cifre.
Exemplu
Intrare
5 7 9 -6 1 -8 3 1 3 4 2 2 5
Ieșire
10
Explicație
- suma elementelor din secvența delimitată de
1 3
este10
; - suma elementelor din secvența delimitată de
4 2
este4
; - suma elementelor din secvența delimitată de
2 5
este-4
; - suma maximă este
10
.
#include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n; int a[100001]; long long sp[100001]; sp[0] = 0; for(int i = 1; i <= n; ++i){ cin >> a[i]; sp[i] = sp[i - 1] + a[i]; } int x, y; cin >> m; long long smax = -1000000000000000000; for(int i = 1; i <= m; ++i){ cin >> x >> y; if(x > y) swap(x, y); long long sum = sp[y] - sp[x-1]; if(sum > smax) smax = sum; } cout << smax; return 0; }
Comentarii