Cod sursa(job #49660)

Utilizator Darth_NiculusIvan Nicolae Darth_Niculus Data 6 aprilie 2007 10:55:53
Problema Oo Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
/* Ivan Nicolae - Bucuresti */
#include <stdio.h>
#include <string.h>

#define NMAX 100000
#define Infinity 0x3f3f3f3f
#define max2(a,b) ((a>b) ? (a) : (b))
#define max3(a,b,c) (max2(max2(a,b),c))

long i,j,n,m,A[NMAX+2],S[NMAX+2];

void ReadData(void)
{
 freopen("oo.in","r",stdin);
 scanf("%ld",&n); long i;
 for (i=1;i<=n;i++)
    scanf("%ld",&A[i]);
 fclose(stdin);
}

int GetSum(long li, long ls)
{
 long i,maxim=0;
 memset(S,0,sizeof(S));
 for (i=li;i<=ls;i++)
    {
     S[i]=(A[i]+A[i-1]) + maxim;
     if (S[i-2] > maxim)
       maxim=S[i-2];
    }
 long rez=-Infinity;
 for (i=li;i<=ls;i++)
    if (S[i] > rez)
      rez=S[i];
/* rez=S[ls];*/
 return rez;
}

void PrintData(long s1,long s2,long s3)
{
 freopen("oo.out","w",stdout);
 printf("%ld",max3(s1,s2,s3));
 fclose(stdout);
}

int main()
{
 ReadData();
 long s1=GetSum(2,n-2);// + (A[1]+A[n]);
 long s2=GetSum(1,n-1);// + (A[1]+A[2]);
 long s3=GetSum(3,n);// + (A[n]+A[n-1]);
 PrintData(s1,s2,s3);
 
 return 0;
}