Cod sursa(job #822548)

Utilizator mcip1977Muresan Ciprian mcip1977 Data 23 noiembrie 2012 18:56:24
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
using namespace std;
ifstream is("date.in");
ofstream os("date.out");
const int maxn=6000001;
int a[maxn],sp[maxn],n,s,maxx=-0x3f3f3f,im,jm;
int main()
{
    is>>n;
    sp[0]=0;
    for(int i=1;i<=n;i++)
    {
        is>>a[i];
        sp[i]=sp[i-1]+a[i];
    }
    /* //varianta npatrat
    for(int i=1;i<n;i++)
        for(int j=i;j<=n;j++)
            if(sp[j]-sp[i-1]>maxx)
            {
                maxx=sp[j]-sp[i-1];
                im=i; jm=j;
            }
    */
    //varianta liniara O(n)
    for(int i=1;i<=n;i++)
       if(sp[i]>maxx)
       {
           maxx=sp[i];
           jm=i;
       }
    im=jm;
    while(!(sp[im]<0 && sp[im-1]>=0) && im>0) im--;
    if(im>0) im++;
    else if(sp[1]<0) im=im+2;
         else im++;
    for(int k=im;k<=jm;k++) os<<a[k]<<" ";
    is.close();
    os.close();
    return 0;
}