Cod sursa(job #880542)

Utilizator Ionut228Ionut Calofir Ionut228 Data 16 februarie 2013 21:41:42
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<fstream>
#define nmax 6000001
using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");

int maxim(int a, int b)
{
    if(a>=b) return a;
    else return b;
}

int n,i,v[nmax],p[nmax],s=0,sm[nmax],maxim1,neg=0,mm=-100000,poz=0,pp[3],j=0;

int main()
{
    f>>n;
    s=0;
    bool negative=false;
    bool positive=false;
    for(i=1;i<=n;i++)
    {
        f>>v[i];
        p[v[i]]=i;
    }
    for(i=1;i<=n;i++)
    {
        if(v[i]<0) neg++;
        if(v[i]>=0) poz++;
    }
    if(neg==n)
    {
        negative=true;
    }
    if(poz==n)
    {
        positive=true;
    }
    if(negative)
    {
        for(i=1;i<=n;i++)
        {
            if(v[i]>mm)
            mm=v[i];
        }
        g<<mm<<" "<<p[mm];
    }
    if(positive)
    {
        for(i=1;i<=n;i++)
        {
            s+=v[i];
        }
        g<<s<<" "<<"1"<<" "<<n;
    }
    else if(!negative && !positive)
    {
    sm[1]=v[1];
    maxim1=sm[1];
    for(i=2;i<=n;i++)
    {
        sm[i]=maxim(sm[i-1]+v[i],sm[i]);
        if(maxim1>sm[i]) sm[i]=maxim1;
    }
    g<<sm[n];
    }
    f.close();g.close();
    return 0;
}