Cod sursa(job #2274888)

Utilizator CristianaMelinceanuMelinceanu Cristiana CristianaMelinceanu Data 2 noiembrie 2018 17:16:12
Problema Subsecventa de suma maxima Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <fstream>

using namespace std;

int v[100];
struct secventa
{
    int l;
    int r;
    int sum;
};

secventa divide(int left,int right)
{

    int m=(left+right)/2;

    if(left==right)
    {
        secventa a;
        a.sum=v[left];
        a.l=left;
        a.r=right;
        return a;
    }
    int cl=left;
    int cm=m;
    int cr=right;
    secventa r1,r2;
    r1=divide(left,m);
    r2=divide(m+1,right);
    secventa sleft,sright;
    sleft.sum=0;
    sleft.l=0;
    sleft.r=m;
    sright.l=m+1;
    sright.r=0;
    sright.sum=0;
    int s=0;
     secventa r3;
    r3.sum=0;
    r3.l=0;
    r3.r=0;
    for(int i=m;i>=left;i--)
    {
        s=s+v[i];
        if(sleft.sum<s)
        {
            sleft.sum=s;
            sleft.l=i;
        }
    }
    s=0;
    for(int i=m+1;i<=right;i++)
    {
        s+=v[i];
        if(sright.sum<s)
           {
               sright.sum=s;
               sright.r=i;
           }
    }

    r3.sum=sleft.sum + sright.sum;
    r3.l = sleft.l;
    r3.r = sright.r;
    if(r1.sum >r2.sum)
    {
        if(r1.sum > r3.sum)
            return r1;
        else return r3;
    }
    else
    {
        if(r2.sum<r3.sum)
            return r3;
        else return r2;
    }

}

int main()
{
    int n;
    ifstream f("ssm.in");
    ofstream g("ssm.out");
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];
    secventa suma=divide(1,n);
    g<<suma.sum<<" "<<suma.l<<" "<<suma.r;


    return 0;
}