Mai intai trebuie sa te autentifici.
Cod sursa(job #2890676)
| Utilizator | Data | 16 aprilie 2022 11:56:39 | |
|---|---|---|---|
| Problema | Subsecventa de suma maxima | Scor | 85 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.88 kb |
#include<bits/stdc++.h>
using namespace std;
int n,sol = INT_MIN;
//v[6000005],sp[6000005],mp[6000005];
int mp,sp;
int main() {
ifstream fin("ssm.in");
ofstream fout("ssm.out");
/**Citirea datelor**/
fin >> n;
/**
Calculam sumele partiale
sp[0] = 0
sp[i] = v[i] + sp[i-1]
mp[i] = min(sp[0],sp[1],sp[2],...,sp[i])
mp[i] = min(mp[i-1],sp[i])
mp[0] = 0
**/
int indexFinal,indexInitial;
sp = 0;
//mp[0] = 0;
mp = 0;
for (int i = 1; i <= n; i++) {
int x;
fin >> x; //citim elementul curent
sp += x;
int val = sp - mp;
if(val > sol)
indexFinal = i;
sol = max(sol, val);
if(sp < mp && i+1 <=n )
indexInitial = i+1;
mp = min(mp, sp);
//mp[i] = min(mp[i-1],sp[i]);
}
fout << sol << " "<<indexInitial<<" "<<indexFinal;
}