Cod sursa(job #270275)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 3 martie 2009 21:08:20
Problema Subsecventa de suma maxima Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
# include <stdio.h>
long int a[1000005],b[1000005],s[1000005],p1,p2,n,k,s1,i,j,l,max,smax;
int main ()
{
freopen ("ssm.in","r",stdin);
freopen ("ssm.out","w",stdout);
scanf ("%li",&n);
for (i=1;i<=n;i++)
scanf ("%li",&a[i]);
s[1]=a[1];
j=1;
b[1]=1;
for (i=2;i<=n;i++)
{
if (s[i-1]<0)
{
s[i]=a[i];
j=1;
}
else
{
s[i]=s[i-1]+a[i];
j++;
}
b[i]=j;
}
max=-2000000000;
for (i=1;i<=n;i++)
if (s[i]>max)
max=s[i];
if (max>=0)
{
max=-2000000000;
for (i=1;i<=n;i++)
if (b[i]>=k)
if (s[i]>max)
{
max=s[i];
p2=i;
}
s1=s[p2];
i=p2;
while (s1>0)
{
s1=s1-a[i];
i--;
}
p1=i+1;
}
else
{
smax=-2000000000;
for (i=1;i<=n;i++)
{
s1=0;
for (j=i;j<=n;j++)
{
s1=s1+a[j];
if (smax<s1)
{
smax=s1;
p1=i;
p2=j;
}
}
}
max=smax;
}
printf ("%li %li %li",max,p1,p2);
return 0;
}