Cod sursa(job #2645265)

Utilizator sculap1234321Panainte Alexandru sculap1234321 Data 27 august 2020 16:43:09
Problema Subsecventa de suma maxima Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;
int sumPart[100000];
int kadane(int* arr, int* start,
           int* finish, int n)
{
    // initialize sum, maxSum and
    int sum = 0, maxSum = INT_MIN, i;

    // Just some initial value to check
    // for all negative values case
    *finish = -1;

    // local variable
    int local_start = 0;

    for (i = 0; i < n; ++i)
    {
        sum += arr[i];
        if (sum < 0)
        {
            sum = 0;
            local_start = i + 1;
        }
        else if (sum > maxSum)
        {
            maxSum = sum;
            *start = local_start;
            *finish = i;
        }
    }

    // There is at-least one
    // non-negative number
    if (*finish != -1)
        return maxSum;

    // Special Case: When all numbers
    // in arr[] are negative
    maxSum = arr[0];
    *start = *finish = 0;

    // Find the maximum element in array
    for (i = 1; i < n; i++)
    {
        if (arr[i] > maxSum)
        {
            maxSum = arr[i];
            *start = *finish = i;
        }
    }
    return maxSum;
}
int main()
{
    int n,start,finish,maxSum;
    ifstream fin("ssm.in");
    ofstream fout("ssm.out");
    fin >> n;
    for(int i = 0 ; i < n ; i++)
    {
        fin >> sumPart[i];

    }
    maxSum = kadane(sumPart,&start,&finish,n);
    fout<<maxSum<<" "<<start<<" "<<finish;
    return 0;
}