Cod sursa(job #1912110)

Utilizator ioana_meirosuMeirosu Ioana-Cristina ioana_meirosu Data 7 martie 2017 23:17:12
Problema Subsecventa de suma maxima Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>

using namespace std;

int main() {
    ifstream f("ssm.in",ios::in);
    int n;
    int *array,*sum;

    if(!f.is_open())
    {
        cout<<"Eroare la deschiderea fisierului de input!";
        return -1;
    }

    f>>n;
    array = (int *) malloc(n*sizeof(int));
    sum = (int *) malloc(n*sizeof(int));

    for(int i=0;i<n;i++)
    {
        f>>array[i];
    }

    int start=0, end=0;
    sum[0]=array[0];
    int max=sum[0];

    for(int i=1;i<n;i++)
    {
        if(sum[i-1] + array[i] < array[i]) {
            if(array[i]>max)
            {
                max = array[i];
                start = i;
                end = i;
            }
            sum[i] = array[i];
        }
        else if((sum[i-1] + array[i]) > sum[i-1] )
        {
            /**
             * suntem in cazul in care obtinem o suma mai mare adunand si elementul curent
             * la suma calculata anterior.
             */
            sum[i]= sum[i-1] + array[i];
            if(sum[i]>max) {
                max = sum[i];
                end = i;
            }
        }
        else if(((sum[i-1] + array[i]) < sum[i-1]))
        {
            sum[i]= sum[i-1] + array[i];
        }
    }

    ofstream g("ssm.out",ios::out);
    g<< max << " "<<start + 1<< " "<<end + 1;

    f.close();

    return 0;
}