Cod sursa(job #2274597)

Utilizator mariusgrafuMarius Grafu mariusgrafu Data 2 noiembrie 2018 10:03:19
Problema Subsecventa de suma maxima Scor 15
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;

int _l, _r;

int divide(vector<int> v, int l, int r) {
    if(l == r) return v[l];

    int mid = (l + r)/2;

    int r1 = divide(v, l, mid);
    int r2 = divide(v, mid + 1, r);

    int s_left = 0, s_right = 0, s = 0;

    for(int i = mid; i >= l; --i) {
        s+= v[i];
        if(s > s_left){
            s_left = s;
            _l = i;
        }
    }

    s = 0;

    for(int i = mid + 1; i <= r; ++i) {
        s+= v[i];
        if(s > s_right){
            s_right = s;
            _r = i;
        }
    }

    int s2 = s_left + s_right;

    return max( max(s2, r1), r2 );
}

int main()
{
    ifstream in("ssm.in");
    ofstream out("ssm.out");
    int n;
    in >> n;
    vector<int> v(n);

    for(int i = 0; i < n; ++i) {
        in >> v[i];
    }

    out << divide(v, 0, v.size() - 1); out << " " << _l + 1 << " " << _r + 1;

    return 0;
}