Cod sursa(job #483631)

Utilizator sorecau_catalinSorecau Catalin sorecau_catalin Data 9 septembrie 2010 14:50:26
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <list>
#define NMAX 5005
using namespace std;

ifstream fin("secv.in");
ofstream fout("secv.out");
long n, m, x[NMAX], l[NMAX], p[NMAX], MIN = NMAX;
list<long> a;

void Read();
void Solve();
void Write();

int main()
{
	Read();
	Solve();
	Write();
	return 0;
}

void Read()
{
	fin >> n;
	long i;
	for ( i = 1; i <= n; ++i )
	{
		fin >> x[i];
		a.push_back(x[i]);
	}
	a.sort();
	a.unique();
	m = a.size();
	fin.close();
}
	
void Solve()
{
	long i, j, max, k;
	l[n] = 1;
	p[n] = n;
	for ( i = n-1; i >= 1; --i)
	{
		max = 0;
		k = 0;
		for ( j = i; j <= n; j++)
		if( l[j] > max && x[i] < x[j] ) 
		{
			max = l[j];
			p[i] = p[j];
		}
		for ( j = i + 1; j <=n; ++j )
			if ( l[i] == m && p[i] > p[j] )
				p[i] = p[j];
		if ( max == 0 )
			p[i] = i;
		l[i] = max + 1;
	}
	for ( i = 1; i <= n; i++)
		if ( l[i] == m && p[i]-i+1 < MIN )
			MIN = p[i] - i + 1;
}

void Write()
{
	//long i;
	if ( MIN == NMAX )
		MIN = -1;
	fout << MIN << '\n';
	fout.close();
}