Cod sursa(job #64647)

Utilizator znakeuJurba Andrei znakeu Data 4 iunie 2007 17:47:04
Problema Secventa Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
struct baza
{
	int p,e,s;	
};
int v[500005];


int main()
{
	int i,j,k,n,e;
	baza m,c;
	FILE *in=fopen("secventa.in","r");
	fscanf(in,"%d%d",&n,&k);
	for (i=0; i<n; i++)
		fscanf(in,"%d",&v[i]);
	fclose(in);
	
	m.s=0; m.e=k-1; m.p=0;
	for (i=1; i<k; i++)
		if (v[m.p]>v[i])
			m.p=i;	
	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;	
		}
		else
			if (v[c.p]==v[m.p])
				if (v[c.s]<v[m.s])
				{
					m.p=c.p;
					m.e=c.e;
					m.s=c.s;	
				}
				else
					if (v[c.s]==v[m.s])
					{
			/*			j=c.e;
						while (j<n && v[j]>=v[c.p])
						{
							if (v[c.e]>v[j])
								c.e=j;
							j++;
						}
						j=m.e;
						e=m.e;
						while (j<n && v[j]>=v[m.p])
						{
							if (v[e]>v[j])
								e=j;
							j++;
						}*/
						if (v[m.e]>v[c.e])
						{
							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(out);
	
	
	return 0;
}