Pagini recente » Cod sursa (job #33552) | Cod sursa (job #2123600) | Cod sursa (job #31938) | Cod sursa (job #2904911) | Cod sursa (job #500842)
Cod sursa(job #500842)
#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 = -1;
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] )
{
if (max==vect[i] && l_max>(i-poz[i]+1))
{
ii=poz[i];
jj=i;
l_max=i-poz[i]+1;
}
max=vect[i];
if (l_max==-1)
{
ii=poz[i];
jj=i;
}
}
}
for(i=1;i<=n;i++)
{
fprintf(stdout,"%ld %ld \n",vect[i],poz[i]);
}
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;
}