Cod sursa(job #287157)

Utilizator lucianvnDragomir Lucian lucianvn Data 24 martie 2009 16:31:53
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream.h>
ifstream intrare ("secv.in");
ofstream iesire ("secv.out");
long unsigned v[5001];
unsigned sol[5001][3],n;
int main()
{
	int i,nr,j,max=0,min;
	intrare>>n;
	for(i=1;i<=n;i++)
	{
		intrare>>v[i];
	}
	sol[n][1]=1;
	sol[n][2]=0;
	sol[n][0]=n;
	for(i=n-1;i>=1;i--)
	{
		sol[i][1]=1;
		sol[i][2]=0;
		max=0;
		for(j=i+1;j<=n;j++)
		{

			if(v[i]<v[j])
			{
				if(max<sol[j][1])
				{
					sol[i][1]=sol[j][1]+1;
					max=sol[j][1];
					sol[i][2]=j;
				}
			}
		}
		if(sol[i][1]==1) sol[i][0]=i;
		else sol[i][0]=sol[sol[i][2]][0];
	}
	int start;
	min=0;
	for(i=1;i<=n;i++)
	{
		if(min<sol[i][1])
		{
			min=sol[i][1];
			start=i;
		}
		else if(min==sol[i][1])
		{
			 if(sol[i][0]-i<sol[start][0]-start) start=i;
		}
	}
	j=start;
	max=1;
	long int lola[5001];
	while(j!=0)
	{
		lola[max]=v[j];
		max++;
		j=sol[j][2];
	}
	int sw=0;
	for(i=1;i<=n;i++)
	{
		j=1;
		sw=1;
		while(j<max)
		{
			if(v[i]==lola[j])
			{
				sw=0;
				j=max+1;
			}
			j++;
		}
		if(sw==1) i=n+1;
	}
	if(sw==0)
	{
		nr=sol[start][0]-start+1;
		iesire<<nr;
	}
	else iesire<<-1;
	return 0;
}