Cod sursa(job #2269831)

Utilizator rangrazvanRang Razvan Victor rangrazvan Data 26 octombrie 2018 17:23:34
Problema Subsecventa de suma maxima Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;
int *v;

struct secv{
    int sum, ind1,ind2;
};

secv maxi(secv a, secv b){
    if(a.sum<b.sum) return b;
    return a;
}

secv divide(int l,int r){
    int m = (l+r)/2;
    secv r1,r2;
    if(l==r){
        secv x;
        x.sum = v[l];
        x.ind1 = l;
        x.ind2 = r;
        return x;
    }
    r1 = divide(l,m);
    r2 = divide(m+1,r);
    int s=0;
    secv sl,sr;
    sl.sum = 0;
    sl.ind1 = l;
    sl.ind2 = m;

    sr.sum = 0;
    sr.ind1 = m+1;
    sr.ind2 = r;
    for(int i = m;i>=l;i--){
        s+=v[i];
        if(s<sl.sum){
            sl.ind1++;
        }else{
            sl.sum = s;
        }
    }
    s = 0;
    for(int i = m+1;i<=r;i++){
        s+=v[i];
        if(s<sr.sum){
            sr.ind2--;
        }else{
            sr.sum = s;
        }
    }
    secv r3;
    r3.sum = sl.sum + sr.sum;
    r3.ind1 = sl.ind1;
    r3.ind2 = sr.ind2;
    return maxi(maxi(r1,r2),r3);
}

int main()
{
    ifstream fin("ssm.in");
    ofstream fout("ssm.out");
    int n;
    fin>>n;
    v = new int[n+1];
    for(int i=1;i<=n;i++) fin>>v[i];
    secv rez = divide(1,n);
    fout<<rez.sum<<" "<<rez.ind1<<" "<<rez.ind2+1;
    return 0;
}