Cod sursa(job #2407714)

Utilizator stanbianca611Stan Bianca stanbianca611 Data 17 aprilie 2019 10:23:40
Problema Subsecventa de suma maxima Scor 85
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("ssm.in");
ofstream g ("ssm.out");
int s[6000005], a[6000005];
int summax=-6000000,in, sf, n;
int divide_et_impera(int p, int q)
{
    if(p==q)
    {
        if(summax<a[p])
        {
            summax=a[p];
            in=sf=p;
        }
    }
    else{
    int m=(p+q)/2, i;
    divide_et_impera(p, m);
    divide_et_impera(m+1, q);

    int sum=0, st, dr, sufmax=-6000000, premax=-6000000;

    for(i=m; i>=p; i--)
    {
        sum+=a[i];
        if(sum>=premax) {premax=sum; st=i;}
    }
    sum=0;
    for(i=m+1; i<=q; i++)
    {
        sum+=a[i];
        if(sum>=sufmax) {sufmax=sum; dr=i;}
    }
    if(sufmax+premax>summax) {summax=sufmax+premax; in=st; sf=dr;}
    }
}
int main()
{
    int i, x;
    f>>n;
    for(i=1; i<=n; i++)
    {
        f>>x;
        a[i]=x;
    }
    divide_et_impera(1, n);
    g<<summax<<" "<<in<<" "<<sf;
    return 0;
}