Cod sursa(job #2798626)

Utilizator daria_pDaria Popescu daria_p Data 11 noiembrie 2021 17:13:13
Problema Subsecventa de suma maxima Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <climits>
using namespace std;
ifstream cin("ssm.in");
ofstream cout("ssm.out");
long long v[6000005];
long long ssm(int l,int r,int &i,int &j)
{
    int p1,p2,mid,sol=0,st,dr;
    long long mal=-999999999999999,mar=-9999999999999,s;
    if (l==r)
    {
        i=l;
        j=l;
        return v[l];
    }
    mid=(l+r)/2;
    sol=ssm(l,mid,i,j);
    s=ssm(mid+1,r,p1,p2);
    if (sol<s) {sol=s;i=p1;j=p2;}
    s=0;
    for (st=mid;st>=l;st--)
    {
        s=s+v[st];
        if (mal<s) {mal=s;p1=st;}
    }
    s=0;
    for (dr=mid+1;dr<=r;dr++)
    {
        s=s+v[dr];
        if (mar<s) {mar=s;p2=dr;}
    }
    if (sol<mal+mar) {sol=mal+mar;i=p1;j=p2;}
    return sol;
}
int i,j,n;
long long s;
int main()
{
    cin >>n;
    for (i=1;i<=n;i++)
    {
        cin >>v[i];
    }
    s=ssm(1,n,i,j);
    cout <<s<<" "<<i<<" "<<j;
    return 0;
}