Cod sursa(job #319998)

Utilizator madlexeicar md madlex Data 3 iunie 2009 01:18:45
Problema Secventa Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <iostream>
#include <stdlib.h>
#include <fstream>
using namespace std;

// --------------------------------------
int * piter;
int * pend;
int * pmin;

int minim;
int minimpt;
int maxim;
int maximst;

long N,K;
int vec[500000];

// --------------------------------------
int main();
int _tmain(int argc, char* argv[])
{
	return main();
}

// --------------------------------------
#define get_min(_min,st,en)\
	piter = &vec[(st)];\
	pend  = &vec[(en)];\
	pmin  = piter++;\
	while( piter <= pend )\
	{\
		if( *piter < *pmin )\
			pmin = piter;\
		piter++;\
	}\
	minimpt = int(pmin-vec);\
	_min	= *pmin;

int main()
{
	ifstream in("secventa.in");
	ofstream out("secventa.out");

	long i,Nend;
	int temp;

	// --------------------------------------
	in >> N >> K;
	for(i = 0; i < N; i ++)
		in >> vec[i];

	// --------------------------------------
	get_min(minim,0,K-1);
	maxim	= minim;
	maximst = 0;

	Nend = N-K+1;
	for( i = 1 ; i < Nend ; i ++ )
	{
		if( minimpt < i )
		{
			get_min(minim,i,i+K-1);

			if( minim > maxim )
				maxim = minim, 
				maximst = i;
		}else
		{
			temp = vec[i+K-1];
			if( temp < minim )
			{
				minim = temp,
				minimpt = i+K-1;

				if( minim > maxim )
					maxim = minim, 
					maximst = i;
			}
		}
	}

	out << maximst+1 << " " << (maximst + K) <<" "<< maxim;
}