Cod sursa(job #1113752)

Utilizator addy01adrian dumitrache addy01 Data 20 februarie 2014 21:17:29
Problema Subsecventa de suma maxima Scor 75
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>
#define maxn 6000010
using namespace std;
ifstream in("ssm.in");
ofstream out("ssm.out");
int n,v[maxn];
//int s[maxn];
long long best[maxn];
inline int maxim(int a,int b)
{
    if(a<b)
        return b;
    return a;
}
int main()
{
    int i,beg=1,sf=1;
    in>>n;
   // s[0]=0;
    for(i=1;i<=n;i++)
    {
        in>>v[i];
      //  s[i]=s[i-1]+v[i];
    }
long long sol=0;
int ansbeg;
for(i=1;i<=n;i++)
    {
        if(v[i]<best[i-1]+v[i])
        {
            best[i]=best[i-1]+v[i];

        }
        else
        {
            best[i]=v[i];
            beg=i;
        }


        if(best[i]>sol)
        {
            sol=best[i];
            ansbeg=beg;
            sf=i;
        }
    }

out<<sol<<" "<<ansbeg<<" "<<sf;

    /*
int minim=s[1];
best[1]=s[1];
    for(i=2;i<=n;i++)
       {
            if(s[i-1]<minim)
                minim=s[i-1];
                if(v[i]<0)
                    best[i]=maxim(s[i]-minim,maxim(s[i],best[i-1]));
                else
                    best[i]=maxim(s[i]-minim,s[i]);
       }
       int m=best[1],poz=1;
       for(i=2;i<=n;i++)
        if(best[i]>m)
        {
            m=best[i];
            poz=i;
            }
            cout<<m<<" ";
            best[0]=1<<30;
            for(i=poz;i>=1;i--)
            {
                if(best[i]<best[i-1])
                {
                    cout<<i<<" "<<poz;
                    return 0;
                }
            }*/
    return 0;
}