Cod sursa(job #1232382)

Utilizator AcuasPopescu Nicolae-Aurelian Acuas Data 22 septembrie 2014 19:42:39
Problema Subsecventa de suma maxima Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <algorithm>
#include <fstream>
#include <limits.h>
using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
long long m,bl,l,br,s,p,maxs,maxp,i,mi,j;
long long a[6000001],sum[6000001],best[6000001];
int ssecv(int l, int r) {
    if (l == r) return a[l];
    long mid = (l + r) / 2;
    long long bestL = ssecv(l, mid);
    long long bestR = ssecv(mid + 1, r);
    long long suf = 0;
    long long pre = 0;
    long long maxSuf = LLONG_MIN;
    long long maxPre = LLONG_MIN;
    for (long i = mid; i >= l; i--) {
        suf += a[i];
        if (maxSuf < suf) maxSuf = suf;
    }
    for (long i = mid + 1; i <= r; i++) {
        pre += a[i];
        if (maxPre < pre) maxPre = pre;
    }
    max(bestL, max(bestR, maxPre + maxSuf));
    g<<bestR<<' '<<bestL<<endl;
}

int main()
{
    long n;
    sum[0]=0;
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i];
    for(i=1;i<=n;i++)
        sum[i]=a[i]+sum[i-1];
    mi=sum[0];
    long long bestSum=LLONG_MIN;
    for(i=1;i<=n;i++)
    {
        best[i]=sum[i]-mi;
        if(mi>sum[i]) {mi=sum[i];
        j=i+1;}
        if(bestSum<best[i]) {bestSum=best[i];
        m=i;
        }
    }
    g<<bestSum<<" "<<j<<" "<<m<<endl;
    return 0;
}