Cod sursa(job #517358)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 28 decembrie 2010 15:44:15
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<stdio.h>
#define N 6000001
long a[N];
long max(long b,long c)
{if(c<b)
      return b;
return c;}

long get(long l,long r,long *p,long *q) 
{long mid=(l+r)/2,bestL,bestR,suf=0,pre=0,maxSuf=-1000,maxPre=-1000,i;
if(l==r) 
    return a[l];
bestL=get(l,mid,p,q);
bestR=get(mid+1,r,p,q);
for(i=mid;i>=l;i--) 
    {suf+=a[i];
    if(maxSuf<suf) 
          {maxSuf=suf;
          (*p)=i;}}
for(i=mid+1;i<=r;i++) 
    {pre+=a[i];
    if(maxPre<pre) 
          {maxPre=pre;
          (*q)=i;}}
return max(bestL,max(bestR,maxPre+maxSuf));}

int main()
{long n,i,p=0,q=0;
freopen("ssm.in","r",stdin);
freopen("ssm.out","w",stdout);
scanf("%ld\n",&n);
for(i=1;i<=n;i++)
      scanf("%ld",&a[i]);       
printf("%ld %ld %ld\n",get(1,n,&p,&q),p,q);
fclose(stdin);
fclose(stdout);
return 0;}