Cod sursa(job #780634)

Utilizator stef1995mmarcu stefan ovidiu stef1995m Data 20 august 2012 22:08:58
Problema Secv Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<iostream>
#include<fstream>
#include<cstdlib>
using namespace std;
const int maxx=5005;
int i,j,n,x[maxx],y[maxx],first[maxx],a[maxx],maxim,maxim2,poz,poz2,nr,minim;
int cmp(const void *p,const void *q)
{
	return *(int *)p-*(int *)q;
}
int main()
{
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&x[i]);
		a[i]=x[i];
	}
	qsort(a+1,n,4,cmp);
	i=2;
	nr=1;
	while(i<=n)
	{
		if(a[i]!=a[i-1])
			nr++;
		i++;
	}
	y[1]=1;
	first[1]=1;
	for(i=2;i<=n;i++)
	{
		maxim=0;
		for(j=1;j<=i-1;j++)
			if(x[j]<x[i])
				if(maxim<y[j])
				{
					maxim=y[j];
					poz2=j;
				}
			y[i]=maxim+1;
		if(maxim==0)
			first[i]=i;
		else
			first[i]=first[poz2];
		if(maxim2<y[i])
			maxim2=y[i];
	}
	if(maxim2!=nr)
		printf("-1\n");
	else
	{
		minim=maxx;
		for(i=1;i<=n;i++)
			if(y[i]==nr)
				if(minim>i-first[i]+1)
					minim=i-first[i]+1;
		printf("%d\n",minim);
	}
	return 0;
}