Cod sursa(job #2269863)

Utilizator AlexGAlexandru Gheorghe AlexG Data 26 octombrie 2018 17:44:55
Problema Subsecventa de suma maxima Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

int l, r, sMax=-2000000;
void divide(vector<int> &v, int left, int right)
{
    if(left == right)
        return;
    int mid{(left+right)/2};
    divide(v, left, mid);
    divide(v, mid+1, right);
    int sLeft{0}, sRight{0}, s{0}, eLeft, eRight;
    for(int i=mid; i>=left; --i)
    {
        s += v[i];
        if(sLeft < s)
        {
            sLeft = s;
            eLeft = i;
        }
    }
    s = 0;
    for(int i=mid+1; i<=right; ++i)
    {
        s += v[i];
        if(sRight < s)
        {
            sRight = s;
            eRight = i;
        }
    }
    s = sLeft + sRight;
    if(s > sMax)
    {
        sMax = s;
        l = eLeft;
        r = eRight;
    }
}

int main()
{
    ifstream fin("ssm.in");
    int n;
    fin >> n;
    vector<int> v(n);
    for(int i=0; i<n; ++i)
        fin >> v[i];
    ofstream fout("ssm.out");
    divide(v, 0, n-1);
    fout << sMax << ' ' << l+1 << ' ' << r+1;
    return 0;
}