Cod sursa(job #2562727)

Utilizator maria.osman10Osman Maria maria.osman10 Data 29 februarie 2020 17:37:06
Problema Subsecventa de suma maxima Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>

using namespace std;
#define INF 2000000009


int v[10009];


int answer = -INF;
int poz1;
int poz2;

void divide(int left,int right)
{
    if(left == right) {
        if(v[left]>answer)
            {answer=v[left];
            poz1=left;
            poz2=left;
            }
        return ;
    }
    int mij=(left+right)/2;
    divide(left,mij);
    divide(mij+1,right);
    int sp = 0, spmaxL = -INF, spmaxR = -INF, pozL, pozR;
    for(int i = mij; i >= left; i--) {
        sp = sp + v[i];
        if(sp > spmaxL) {
            spmaxL = sp;
            pozL = i;
        }
    }
    sp = 0;
    for(int i = mij + 1; i <= right; i++) {
        sp = sp + v[i];
        if(sp > spmaxR) {
            spmaxR = sp;
            pozR = i;
        }
    }
    if(spmaxL + spmaxR > answer) {
        answer = spmaxL + spmaxR;
        poz1 = pozL;
        poz2 = pozR;
    }
}
int main()
{
    freopen("ssm.in", "r", stdin);
    freopen("ssm.out", "w", stdout);
    int i,n;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];
    divide(1,n);
    cout<<answer<<" "<<poz1<<" "<<poz2;
    return 0;
}