Cod sursa(job #2108892)

Utilizator AndreiSorin26012001Cirpici Andrei Sorin AndreiSorin26012001 Data 18 ianuarie 2018 21:59:14
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;

ifstream in ("ssm.in");
ofstream out ("ssm.out");

int n, maxim, pi, pf;
int arr[6000003], s[6000003];

/*
    s[i] = suma maxima a unei subsecvente ce se termina pe pozitia i
    s[i] = max( arr[i], arr[i] + s[i - 1] );
*/
/*
    p[i] = indicele de inceput al subsecventei de suma maxima ce se termina pe pozitia i
    p[i] = p[i - 1], daca arr[i] <= arr[i] + s[i - 1]
           i, daca arr[i] > arr[i] + s[i - 1]
*/
int main()
{
    in>>n;
    for( int i = 1; i <= n; i++ )
        in>>arr[i];

    s[1] = arr[1];
    arr[1] = 1;
    for( int i = 2; i <= n; i++ )
        if( arr[i] <= arr[i] + s[i - 1] )
        {
            s[i] = arr[i] + s[i - 1];
            arr[i] = arr[i - 1];
        }
        else
        {
            s[i] = arr[i];
            arr[i] = i;
        }

    for( int i = 1; i <= n; i++ )
        if( maxim < s[i] )
        {
            maxim = s[i];
            pi = arr[i];
            pf = i;
        }

    out<<maxim<<" "<<pi<<" "<<pf;

    return 0;
}