Cod sursa(job #2786918)

Utilizator qubitrubbitQubit Rubbit qubitrubbit Data 21 octombrie 2021 22:38:06
Problema Subsecventa de suma maxima Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <vector>
#include <cmath>
#include <iostream>
using namespace std;

FILE *fin = fopen("ssm.in", "r");
ofstream fout("ssm.out");

int main()
{
    int n;
    fscanf(fin, "%d", &n);
    int arr[n];
    for (int i = 0; i < n; ++i)
    {
        fscanf(fin, "%d", &arr[i]);
    }

    int bestStart = 0;
    int bestEnd = 0;
    int bestSum = arr[0];

    int currStart = 0;
    int currEnd = 0;
    int currSum = arr[0];

    for (int i = 1; i < n; ++i)
    {
        if (currSum < 0)
        {
            if (currSum > bestSum)
            {
                bestSum = currSum;
                bestStart = currStart;
                bestEnd = currEnd;
            }
            currSum = arr[i];
            currStart = i;
            currEnd = i;
        }
        else
        {
            if (arr[i] >= 0)
            {
                currSum += arr[i];
                currEnd = i;
                if (currSum > bestSum)
                {
                    bestSum = currSum;
                    bestStart = currStart;
                    bestEnd = currEnd;
                }
            }
            else
            {
                currSum += arr[i];
                currEnd = i;
            }
        }
    }
    fout << bestSum << " " << bestStart + 1 << " " << bestEnd + 1;
    return 0;
}