Pagini recente » Diferente pentru utilizator/vanila_cpp intre reviziile 27 si 28 | Cod sursa (job #2256489) | Cod sursa (job #975230) | Cod sursa (job #128021)
Cod sursa(job #128021)
#include<stdio.h>
long n, oo[122000], r1, r2, r3;
long a[122000], rez;
long max(long x,long y)
{
return x>y?x:y;
}
int main()
{
long i, k, poz, j;
freopen("oo.in","r",stdin);
scanf("%ld",&n);
for (i=0; i<n; i++) scanf("%ld",oo+i);
if (n==2) rez=oo[0]+oo[1];
else
{
r1 = oo[0] + oo[1];
k = r1;
a[1] = k;
poz = 1;
for (i = 3; i < n - 2; i++)
{
a[i] = k + oo[i+1] + oo[i];
for (j = i - 2; j > poz; j--)
if (a[j] > k) poz = j, k = a[j];
}
r1 = max (a[n - 2], k);
for (i = 0 ; i <= n; i++) a[i] = 0;
k = oo[1] + oo[2];
a[1] = k;
poz = 1;
for (i = 4; i < n - 1; i++)
{
a[i] = k + oo[i+1] + oo[i];
for (j = i - 2; j > poz; j--)
if (a[j] > k) poz = j, k = a[j];
}
r2 = max (a[n - 1], k);
for (i = 0 ; i <= n; i++) a[i] = 0;
k = oo[n - 1] + oo[0];
a[1] = k;
poz = 1;
for (i = 2; i < n - 3; i++)
{
a[i] = k + oo[i+1] + oo[i];
for (j = i - 2; j > poz; j--)
if ( a[j] > k) poz = j, k = a[j];
}
r3 = max (a[n - 1], k);
rez = max(max(r1,r2),r3);
}
freopen("oo.out","w",stdout);
printf("%ld\n",rez);
return 0;
}