Cod sursa(job #287105)

Utilizator razvan_3dragomir razvan razvan_3 Data 24 martie 2009 16:07:13
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<fstream.h>
ifstream intrare("secv.in");
ofstream iesire("secv.out");
long int v[5001];
int a[5001][3],n;
void citeste()
{
	intrare>>n;
	for(int i=1;i<=n;i++)
		intrare>>v[i];
}
int main()
{
	citeste();
	int i,j,max;
	for(i=n;i>0;i--)
	{

		max=0;
		for(j=i+1;j<=n;j++)
		{
			if(v[i]<v[j])
			{
				if(max<a[j][0])
				{
					max=a[j][0];
					a[i][1]=j;
					a[i][2]=a[j][2];
				}
			}
		}
		a[i][0]=max+1;
		if(a[i][0]==1)a[i][2]=i;
	}
	max=0;
	for(i=1;i<=n;i++)
	{
		if(max<a[i][0]){max=a[i][0];j=i;}
		else if(max==a[i][0])
		{
			if(a[i][2]-i<a[j][2]-j) j=i;
		}
	}
	int start=j,stop=a[start][2];
	long ver[5001];
	max=1;int gasit;
	while(j!=0)
	{
		ver[max]=v[j];
		max++;
		j=a[j][1];
	}   max--;
	for(i=1;i<=n;i++)
	{
		gasit=0;
		for(j=1;j<=max;j++)
		{
			if(v[i]==ver[j]){gasit=1;j=max+1;}
		}
		if(gasit==0) i=n+1;
	}
	if(gasit)iesire<<stop-start+1;
	else iesire<<"-1";
	return 0;
}