Cod sursa(job #51946)

Utilizator arenakadaffKadaff arenakadaff Data 17 aprilie 2007 12:21:48
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>
#include <stdlib.h>


long int v[5001] , st[5001] ;
char s[3505] ;

int main()
{
	FILE *in  , *out ;
	in = fopen("e:\\klausprj\\in\\secventa.in" , "rt") ;
	out = fopen("e:\\klausprj\\out\\secventa.out" , "wt") ;
	long int n , k , inc , sf , max , x , y , i, j = 0 ;
	fscanf(in , "%ld %ld\n" , &n , &k) ;
	inc = 1 ;
	sf = 1 ;
//	fscanf(in , "%ld" , &v[1]) ;
//	fscanf(in , "%s" , s) ;
	fgets(s , 1000 , in) ;
	v[1] = atoi(s) ;
	st[1] = 1 ;
	max = 0 ;
	for(i = 2 ; i <= k - 1 ; k++)
	{
//		fscanf(in , "%ld" , &v[i]) ;
		while(s[j] != ' ') j++ ;
		j++ ;
		v[i] = atoi(&s[j]) ;
		while(v[st[sf]] > v[i] && sf >= inc) sf -- ;
		st[++sf] = i ;
	}
	for( ; i <= n ; i++)
	{
//		fscanf(in , "%ld" , &v[i]) ;
		while(s[j] != ' ') j++ ;
		j++ ;
		v[i] = atoi(&s[j]) ;
		while(v[st[sf]] > v[i] && sf >= inc) sf -- ;
		st[++sf] = i ;
		if(v[st[inc]] > max)
		{
			max = v[st[inc]] ;
			x = i - k + 1 ;
			y = i ;
		}
		if(st[inc] == i - k + 1) inc++ ;
	}
	if(k == 1)
	{
		x = 1 ;
		y = 1 ;
		for(i = 2 , max = v[1] ; i <= n ; i++) if(max < v[i])
		{
			max = v[i] ;
			x = i ;
			y = i ;
		}
		fprintf(out , "%ld %ld %ld" , x , y , max) ;
	}
	else fprintf(out , "%ld %ld %ld" , x , y , max) ;
	fclose(in) ;
	fclose(out) ;
	return 0 ;
}