Cod sursa(job #2269840)

Utilizator rangrazvanRang Razvan Victor rangrazvan Data 26 octombrie 2018 17:28:35
Problema Subsecventa de suma maxima Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 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 = 0;
    sl.ind2 = m;

    sr.sum = 0;
    sr.ind1 = m+1;
    sr.ind2 = 0;
    for(int i = m;i>=l;i--){
        s+=v[i];
        if(s>sl.sum){
            sl.ind1 = i;
            sl.sum = s;
        }
    }
    s = 0;
    for(int i = m+1;i<=r;i++){
        s+=v[i];
        if(s>sr.sum){
            sr.ind2=i;
            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;
    return 0;
}