Cod sursa(job #2273374)

Utilizator AnduRazvanMindrescu Andu AnduRazvan Data 31 octombrie 2018 14:41:49
Problema Subsecventa de suma maxima Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>

using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int i,n,a[6000001];
int best=-2000000000,poz1,poz2;

void Divide(int left, int right)
{
   if(left==right)
     {if(a[left]>best) best=a[left];}
     else
     {

    int mid=left+(right-left)/2;
    Divide(left,mid);
    Divide(mid+1,right);

    int stg=0,dr=0,smax1=-2000000000,smax2=-2000000000,pozst,pozdr;

    for(int i=mid; i>=1; i--)
        {
            stg=stg+a[i];
            if(stg>=smax1) {smax1=stg;pozst=i;}
        }
    for(int i=mid+1; i<=n; i++)
       {
            dr=dr+a[i];
            if(dr>smax2) {smax2=dr;pozdr=i;}
       }
   if(smax1+smax2>best) {best=smax1+smax2;poz1=pozst;poz2=pozdr;}
     }
}

int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
     fin>>a[i];

    Divide(1,n);
  fout<<best<<" "<<poz1<<" "<<poz2;
    return 0;
}