Cod sursa(job #1369226)

Utilizator somuBanil Ardej somu Data 2 martie 2015 22:45:09
Problema Subsecventa de suma maxima Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>
#include <fstream>
#define nmax 6000005
#define inf 1<<30

using namespace std;

int n, lo, hi, Max, b;
int s[nmax], dp[nmax];

int main() {
    
    ifstream fin("ssm.in");
    ofstream fout("ssm.out");
    
    fin >> n;
    for (int i = 1; i <= n; i++)
        fin >> s[i];
    
    dp[1] = s[1];
    
    Max = -inf;
    
    for (int i = 2; i <= n; i++)
        if (dp[i-1] + s[i] > s[i]) {
            dp[i] = dp[i-1] + s[i];
            if (dp[i] > Max) {
                lo = b;
                hi = i;
                Max = dp[i];
            }
        } else {
            dp[i] = s[i];
            b = i;
        }
    
    fout << Max << " " << lo << " " << hi << "\n";
    
    fin.close();
    fout.close();
    
    return 0;
}