Cod sursa(job #896928)
| Utilizator | Data | 27 februarie 2013 18:00:30 | |
|---|---|---|---|
| Problema | Subsecventa de suma maxima | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.54 kb |
#include<cstdio>
int st,dr,max,stmax,drmax,s,n,x,nmax,pnmax;
bool ok;
int main()
{
freopen("ssm.in","r",stdin);
freopen("ssm.out","w",stdout);
scanf("%d",&n);
s=-1;
max=0;
nmax=-(1<<30);
for(int i=1;i<=n;++i)
{
scanf("%d",&x);++dr;
if(x<0)
{
if(x>nmax){nmax=x;pnmax=i;}
}
else ok=1;
if(s<0){s=0;st=dr=i;}
s+=x;
if(s>max){max=s;stmax=st;drmax=dr;}
}
if(!ok)printf("%d %d %d",nmax,pnmax,pnmax);
else printf("%d %d %d",max,stmax,drmax);
return 0;
}
