Cod sursa(job #279606)

Utilizator flavius_mesterMester Flavius flavius_mester Data 12 martie 2009 21:32:18
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<cstdio>
#include<cstdlib>
#include<climits>

using namespace std;

void solution1();
void solution2();

int main()
{
freopen("ssm.in","rt",stdin);
freopen("ssm.out","wt",stdout);
switch(2)
{case 1:solution1();break;
case 2:solution2();break;
}
return 0;
}
void solution2()
{int n,*v,i;


scanf("%d",&n);
v=(int*)calloc(n+1,sizeof(int*));

for(i=1;i<=n;i++)scanf("%d",&v[i]);
for(i=2;i<=n;i++)v[i]+=v[i-1];

int s_best=v[1],s_i=1,s_j=1;
int min=1;
for(i=2;i<=n;i++)
{if(v[i]-v[min]>s_best){s_best=v[i]-v[min];s_i=min+1;s_j=i;}
if(v[i]<v[min])min=i;}

printf("%d %d %d\n",s_best,s_i,s_j);

}

void solution1()
{
int *v;
int n,i,j;
int Smax=INT_MIN,s=0;
int xm=0,ym=0;


scanf("%d",&n);
v=(int *)calloc(1,sizeof(int *));

for(i=1;i<=n;i++){v=(int *)realloc(v,(i+1)*sizeof(int *));

	scanf("%d",&v[i]);
				s+=v[i];if(s>Smax){Smax=s;xm=1;ym=i;}	
					}


for(i=2;i<n;i++)
{s=0;
for(j=i;j<=n;j++){s+=v[j];
						if(Smax<s){Smax=s;xm=i;ym=j;}
					}

}
printf("%ld %d %d\n",Smax,xm,ym);

}