Cod sursa(job #2589975)

Utilizator r00t_Roman Remus r00t_ Data 27 martie 2020 11:51:28
Problema Subsecventa de suma maxima Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <iostream>
#include <algorithm>

using namespace std;

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

int sum[6000010];
int minsum[6000010];
int best[6000010];
int lft[6000010];

int main()
{
    int n;
    fin >> n;
    for (int i = 0; i <= n; i++)
    {
        minsum[i] = 1 << 30;
    }
    for (int i = 1; i <= n; i++)
    {
        int x;
        fin >> x;
        sum[i] = x + sum[i - 1];
        if (minsum[i - 1] <= sum[i])
            lft[i] = lft[i - 1];
        else
            lft[i] = i;
        minsum[i] = min(sum[i], minsum[i - 1]);
    }
    minsum[0] = 0;
    
    int left=0, right=0;
    int bestSol = -(1<<30);
    for (int i = 1; i <= n; i++)
    {
        best[i] = sum[i] - minsum[i];
        if (best[i] > bestSol)
        {
            left = lft[i];
            right = i;
            bestSol = max(bestSol, best[i]);
        }
    }


    fout << bestSol << ' ' << left+1 << ' ' << right;




    return 0;
}