Cod sursa(job #558095)

Utilizator lau08Laurentiu Capatina lau08 Data 17 martie 2011 08:31:52
Problema Secventa 2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<stdio.h>
#define NMax 50001
int n,K,a[NMax],b[NMax],d,st,suma,s[NMax];

int max(int x,int y)
{if(x > y) return x;
else return y;
}

void Read()
{int maxlocal = -NMax,i;
FILE *f=fopen("secv2.in","r");
fscanf(f,"%d %d",&n,&K);
for(i=1;i<=n;i++)
	{
		fscanf(f,"%d",&s[i]);
		if(s[i] > maxlocal) maxlocal = s[i];
		a[i] = maxlocal;
	}
fclose(f);
}

void Solve(int k)
{int i;
b[k] = a[k-1] + s[k];
for(i=k+1;i<=n;i++)
	b[i] = max(b[i-1],a[i-1]+s[i]);

for(i=1;i<=n;i++)
	a[i] = b[i];
}

void Reverse()
{int aux,i;
for(i=1;i<=n/2;i++)
{
	aux = s[i];
	s[i] = s[n-i+1];
	s[n-i+1] = aux;
}
}

void Refresh_a()
{int maxlocal=-NMax,i;
for(i=1;i<=n;i++)
	if(s[i] > maxlocal) maxlocal = s[i];
		a[i] = maxlocal;
}

void Print_file()
{
FILE *g=fopen("secv2.out","w");
fprintf(g,"%d %d %d\n",st,d,suma);
}

int main()
{int i;
Read();
for(i=2;i<=K;i++)
	Solve(i);
suma = b[n];
for(i=n-1;i>=K;i--)
	if(b[i]==b[n]) continue;
		else break;
	d=i+1;
Reverse();
Refresh_a();
for(i=1;i<=K;i++)
	Solve(i);
for(i=n-1;i>=K;i--)
	if(b[i]==b[n]) continue;
		else break;
	st = n - i;
Print_file();
return 0;
}