Cod sursa(job #176508)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 11 aprilie 2008 12:54:33
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<fstream.h>

int poz (long a[5002], int p, int u)
	{
	int piv=a[p],aux;
	while (p<u)
		{
		if (a[p]>a[u]) {
			       aux=a[p];
			       a[p]=a[u];
			       a[u]=aux;
			       }
		if (piv==a[p]) u--;
				else p++;
		}
	return p;
	}

void quick(long a[5002], int p, int u)
	{
	int k;
	if (p<u) {
		 k=poz(a,p,u);
		 quick(a,p,k-1);
		 quick(a,k+1,u);
		 }
	}

int main()
{
int t ,max,p,n,j,i,k=0,pp[5002],nro[5002],sw,tat[5002];
long v[5002],a[5002];
ifstream f("secv.in");
f>>n;
for (i=1;i<=n;i++) f>>v[i];
f.close();
for (i=1;i<=n;i++) a[i]=v[i];
quick(a,1,n);
k=1;
for (i=2;i<=n;i++) if (a[i]!=a[i-1]) k++;
nro[1]=pp[1]=1;tat[1]=0;
for (i=2;i<=n;i++)
	{
	t=0;max=0;
	for (j=i-1;j>=1;j--) if (v[i]>v[j] && max<nro[j]) {
							  max=nro[j];
							  t=j;
							  p=pp[j];
							  }
	if (max==0) {
		    nro[i]=1;
		    tat[i]=0;
		    pp[i]=i;
		    }
		else{
		    nro[i]=nro[t]+1;
		    tat[i]=t;
		    pp[i]=p;
		    }
	}
int min=5001;
for (i=n;i>=k;i--)
	if (nro[i]==k && i-pp[i]+1<min) min=i-pp[i]+1;
ofstream g("secv.out");
if (min<5001) g<<min;
	else g<<-1;
g.close();
return 0;
}