Cod sursa(job #1000635)

Utilizator alexx.cosmaCosma Cristian Alexandru alexx.cosma Data 23 septembrie 2013 15:02:21
Problema Subsecventa de suma maxima Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>

using namespace std;

const int maxLength = 6000010;

int a[maxLength];
int best[maxLength];
int main()
{
    ifstream fin("ssm.in");
    ofstream fout("ssm.out");

    if (!fin)
    {
        cout << "There was a problem opening file";
        return 0;
    }
    int arrLength=0;
    int counter=0;

    fin >> arrLength;

    for(int i=0; i < arrLength; i++)
    {
        fin>>a[counter] ;
        counter++;
    }

    int bestSum = a[0];
    int bestEndIndex=0;
    for (int i = 0; i < arrLength; ++ i)
    {
        best[i] = a[i];
        if (best[i] < best[i-1] + a[i])
            best[i] = best[i-1] + a[i];

        if (bestSum < best[i])
        {
            bestSum = best[i];
            bestEndIndex = i;
        }
    }

    int i=bestEndIndex;
    int tempSum = bestSum;
    while(tempSum >= 0 && i >= 0){
        tempSum -= a[i];
        i--;
    }
    if(bestSum >= 0){
        ++i;
    }

    fout << bestSum << " " << i+1 << " " << bestEndIndex+1 << "\n";

    return 0;
}