Pagini recente » Cod sursa (job #255629) | Cod sursa (job #256105) | Cod sursa (job #3300885) | Cod sursa (job #1016257) | Cod sursa (job #3345691)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
struct Rezultat{
int suma;
int st;
int sf;
};
Rezultat ssm( int n , vector<int>&v){
vector<int>dp(n+1);
dp[1] = v[1];
int sol = dp[1];
int start=1;
int end=1;
int start_curent = 1;
for(int i = 2; i<=n;i++){
if(dp[i-1]<0){
dp[i] = v[i];
start_curent = i; // startul unei noi secvente dar nu stim ca e cea buna
}
else {
dp[i] = dp[i-1]+v[i];
}
if(dp[i]>sol)
{
sol = dp[i];
end = i;
start = start_curent; // se pune in start inceputul unei secvente bune, nu e ca
// la end, pentru ca end punem pozitia aici chiar daca am trecut prin mai multe eleemnte
// start curent nu se actualizeaza, ci doar cand incepe o noua secv
}
}
Rezultat rez;
rez.suma = sol;
rez.st = start;
rez.sf = end;
return rez;
}
int main(){
int i, n;
fin >> n;
vector<int> v(n+1);
for(i = 1; i <= n; i++) {
fin >> v[i];
}
Rezultat final = ssm(n,v);
fout<<final.suma<<" "<<final.st<<" "<<final.sf;
}