Cod sursa(job #334719)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 27 iulie 2009 19:54:18
Problema Secventa 2 Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>

int main()
{
	int n,k,x[50000],s[50000],m[50000],l[50000],i,m1[50000],l1[50000],max=-25001,pozmax,lmax;
	FILE *f=fopen("secv2.in","r");

	fscanf(f,"%i%i",&n,&k);	
	for(i=0;i<n;i++)
		fscanf(f,"%i",x+i);
	fclose(f);

	for(i=0;i<n;i++)
	{
		m[i]=x[i];	
		l[i]=1;
	}
	s[0]=x[0];
	for(i=1;i<n;i++)
	{
		if(m[i-1]+x[i]>m[i])
		{
			m[i]=m[i-1]+x[i];
			l[i]=1+l[i-1];
		}
		s[i]=s[i-1]+x[i];
	}
	
	for(i=0;i<n;i++)
	{
		if(l[i]>=k)
		{
			m1[i]=m[i];
			l1[i]=l[i];
		}
		else 
		{
			if(i>=k)
			{
				if(m[i-k]>0)
				{
					m1[i]=m[i]+s[i-l[i]]-s[i-k]+m[i-k];
					l1[i]=k+l[i-k];
				}
				else
				{
					m1[i]=m[i]+s[i-l[i]]-s[i-k];
					l1[i]=k;
				}
			}
			else if(i==k-1)
			{
				m1[i]=s[i];
				l1[i]=k;
			}
		}
	}

	for(i=k-1;i<n;i++)
	{
		if(m1[i]>max)
		{
			max=m1[i];
			pozmax=i;
			lmax=l1[i];
		}
	}

	f=fopen("secv2.out","w");
	fprintf(f,"%i %i %i\n",i+2-k,i+1,max);
	fclose(f);
	return 0;
}