Cod sursa(job #451087)

Utilizator crushackPopescu Silviu crushack Data 8 mai 2010 23:04:19
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
#define lung 5000

int a[lung];
int ap[lung];
int c[lung];
int pr[lung];

int main()
{
	int n,i,j,nr,max,rez;
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
	scanf("%d",&n);nr=0;max=0;
	
	for (i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		for (j=0;j<nr;j++)
			if (a[i]==ap[j])
				break;
		if(j==nr)
		{
			ap[nr++]=a[i];
		}
		for (j=i-1;j>=0;j--)
			if (a[j]<a[i] && c[j]>=c[i])
				c[i]=c[j]+1,pr[i]=j;
		if (!c[i])
			c[i]++;
		if (c[i]>max)
			max=c[i];
	}
	
	rez=-2;
	if (max==nr)
	for (i=0;i<n;i++)
		if (c[i]==max)
		{
			for (j=i;c[j]>1;)
				j=pr[j];
			rez= (rez==-2 || i-j<rez) ? i-j : rez;
		}
	printf("%d\n",rez+1);
	return 0;
}