Pagini recente » Cod sursa (job #356049) | Cod sursa (job #2473350) | Cod sursa (job #2886945) | Monitorul de evaluare | Cod sursa (job #500841)
Cod sursa(job #500841)
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
void secv_n(long *data,long n,FILE *out)
{
/*
* retine pana la pozitia i care este cea mai
* mare suma posibila . pe pozitia i se alege maximul dintre
* elementul de pe pozia i din secventa originala si suma
* dintre element si suma precedenta. cc
*/
long int *vect = (long int *) malloc((n+1)*sizeof(long int));
long int *poz = (long int *) malloc((n+1)*sizeof(long int));
long int max,i,ii=0,jj=0;
max = data[1];
vect[0]=0;
poz[0]=1;
int l_max = INT_MAX;
for (i=1;i<=n;i++)
{
vect[i]=data[i];
poz[i]=i;
if(vect[i]<(vect[i-1]+data[i]))
{
vect[i]=vect[i-1]+data[i];
poz[i]=poz[i-1];
}
if(max<vect[i] && l_max>(i-poz[i]+1))
{
max=vect[i];
ii=poz[i];
jj=i;
l_max=i-poz[i]+1;
}
}
fprintf(out,"%ld %ld %ld",max,ii,jj);
}
int main ()
{
long int n,*vect,i;
FILE *fid = fopen("ssm.in","r");
FILE *foid = fopen("ssm.out","w");
fscanf(fid,"%ld",&n);
vect = (long int*) malloc(sizeof(long int)*(n+1));
for (i=1;i<=n;i++)
fscanf(fid,"%ld",&vect[i]);
secv_n(vect,n,foid);
fclose(fid);
fclose(foid);
return 0;
}