Pagini recente » Cod sursa (job #1842374) | Cod sursa (job #35617) | Cod sursa (job #357783) | Cod sursa (job #1391625) | Cod sursa (job #539093)
Cod sursa(job #539093)
#include<stdio.h>
#define NMAX 6000001
FILE *in,*out;
int n,S[NMAX],i;
int main()
{
in=fopen("ssm.in","rt");
out=fopen("ssm.out","wt");
fscanf(in,"%d",&n);
for(i=1;i<=n;i++)
fscanf(in,"%d",&S[i]);
fclose(in);
// In rezolvarea de mai jos, S[i] retine suma tuturor valorile intre pozitiile 1 .. i
// best[i] = Max(S[i] - S[j]) cu j < i =>
// best[i] = S[i] - Min(S[j]) cu j < i
int bestsum= -(1<<30);
int min=0,idx,begin,end;
for(i=1;i<=n;i++)
{
S[i]+=S[i-1];
if(bestsum<S[i]-min)
{
bestsum=S[i]-min;
begin=idx+1;
end=i;
}
if(min>S[i])
{
min=S[i];
idx=i;
}
}
fprintf(out,"%d %d %d",bestsum,begin,end);
return 0;
}