Cod sursa(job #1645040)

Utilizator sergiu21Sergiu Apavaloae sergiu21 Data 10 martie 2016 10:46:44
Problema Subsecventa de suma maxima Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include<fstream>

using namespace std;
int beg,left1,bestsum,s[10000],end1,right1,i;
void f(int lo,int hi)
{
    if(lo==hi)
    {
        if(bestsum<s[lo])
            bestsum=s[lo],beg=lo,end1=lo;
        return;
    }
    int mid=(lo+hi)/2;
    f(lo,mid);
    f(mid+1,hi);
    int pref=0,suf=0,maxpref=-int(1e9),maxsuf=-int(1e9);
    for(i=mid;i>=lo;i--)
    {
        pref=pref+s[i];
        if(maxpref<=pref)
            {maxpref=pref;left1=i;}
    }
    for(i=mid+1;i<=hi;i++)
    {  suf=suf+s[i];
        if(maxsuf<suf)
            maxsuf=suf,right1=i;
    }
    if(maxpref+maxsuf>bestsum)
        bestsum=maxpref+maxsuf,beg=left1,end1=right1;
}
int main()
{
    ifstream fin("ssm.in");int n;
    ofstream fout("ssm.out");
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>s[i];
    f(1,n);
    fout<<bestsum<<" "<<beg<<" "<<end1;

}