Cod sursa(job #142860)

Utilizator znakeuJurba Andrei znakeu Data 25 februarie 2008 14:45:04
Problema Secventa Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
struct baza
{
	int p,e,s;	
};
int v[500005];
char s[3000300];

int main()
{
	int i,j,k,n,p=0,sm;
	baza m,c;
	FILE *in=fopen("secventa.in","r");
	fscanf(in,"%d%d",&n,&k);
	fgets(s,300250,in);
	fgets(s,300250,in);
	
	v[0]=0; p=0; sm=1;
	if (s[p]=='-')
	{ sm=-1; p++; }
	for (;s[p]>='0' && s[p]<='9'; p++)
		v[0]=v[0]*10+(s[p]-'0');
	v[0]*=sm; p++;
	
	m.s=0; m.e=k-1; m.p=0;
	for (i=1; i<k; i++)
	{
		v[i]=0; sm=1;
		if (s[p]=='-')
		{ sm=-1; p++; }
		for (;s[p]>='0' && s[p]<='9'; p++)
			v[i]=v[i]*10+(s[p]-'0');
		v[i]*=sm; p++;
		if (v[m.p]>v[i])
			m.p=i;	
	}
	for (i=k; i<n; i++)
	{
		v[i]=0; sm=1;
		if (s[p]=='-')
		{ sm=-1; p++; }
		for (;s[p]>='0' && s[p]<='9'; p++)
			v[i]=v[i]*10+(s[p]-'0');
		v[i]*=sm; p++;		
	}
	
	for (i=1; i<=n-k; i++)
	{
		c.p=i; c.s=i; c.e=i+k-1;
		for (j=i+1; j<i+k; j++)
			if (v[c.p]>v[j])
				c.p=j;
		i=c.p;
		if (v[c.p]>v[m.p])
		{
			m.p=c.p;
			m.e=c.e;
			m.s=c.s;	
		}
	}
	
	FILE *out=fopen("secventa.out","w");
	fprintf(out,"%d %d %d\n",m.s+1,m.e+1,v[m.p]);
	fclose(in);
	fclose(out);
	return 0;
}