Cod sursa(job #1371854)

Utilizator catalin15Bahrin Catalin catalin15 Data 4 martie 2015 09:34:08
Problema Subsecventa de suma maxima Scor 85
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <iomanip>
using namespace std;
ofstream out("ssm.out");

int a[6000002];
int n,bestSum,i;
int best[6000002];
bool ok=false;
int x,sum,y;
bool rezolva_usor=false;

void rezolva1()
{
    sum = 0;
    bestSum = -9999;
    x=1;
    int y=n;
    for (i = 1; i <= n; i++)
    {
        sum += a[i];
        if (sum < 0)
            sum = 0,x=i;
        else if (sum > bestSum)
            bestSum = sum ,y=i;
    }

    out<<bestSum<<" "<<x+1<<" "<<y;
}

void rezolva2()
{
    bestSum = a[1];
    x=1;
    y=n;
    for (i = 1; i <= n; ++ i)
    {
        best[i] = a[i];
        if (best[i] < best[i-1] + a[i])
        {
            best[i] = best[i-1] + a[i];
            if(ok==false)
                x=i,ok=true;
        }
        if (bestSum < best[i])
            bestSum = best[i],y=i;
    }

    out<<bestSum<<" "<<x+1<<" " <<y;
}



int main()
{
    freopen("ssm.in","r",stdin);
    scanf("%d",&n);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&a[i]);
        if(a[i])
            rezolva_usor=true;
    }
    if(rezolva_usor==true)
      rezolva1();
    else
    rezolva2();


    return 0;
}