Cod sursa(job #200960)

Utilizator IrnukIrina Grosu Irnuk Data 27 iulie 2008 23:29:51
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
/*secv infoarena*/



#include<fstream.h>

long v[5001],cit[5001];
int n,k,min=5002;

ifstream fin("secv.in");
ofstream fout("secv.out");

void citire()
{
	int i;
	fin>>n;
	for(i=0;i<n;i++)
		fin>>cit[i];
}

void pivotare(int i,int j,int &m)
{

	int pivot=v[i];

	while(i<j)
	{
		while(j>i && v[j]>=pivot) j--;
		v[i]=v[j];
		while(i<j && v[i]<=pivot) i++; 
		v[j]=v[i];
	}
	v[i]=pivot;
	m=i;
}

void quick_sort(int p,int q)
{
	int m;

	if(p<q)
	{
		pivotare(p,q,m); 

		quick_sort(p,m-1);
	
		quick_sort(m+1,q);
	}

}

int cauta(int i)
{
	int j;
	for(j=0;j<k;j++)
		if(cit[i]==v[j])
			return 0;
	return 1;
}

int afla(int j,int poz)
{
	int i;
	for(i=poz;i<n;i++)
		if(cit[i]==v[j])
			return i;

	return -1;
}

int main()
{
	int i,j,poz;
	citire();
	v[0]=cit[0];
	k=1;
	for(i=1;i<n;i++)
	{
		if(cauta(i)==1)
			v[k++]=cit[i];
	}

	quick_sort(0,k-1);

	for(i=0;i<n&&poz!=-1;i++)
	{
		if(v[0]==cit[i])
		{
			poz=i;
			for(j=1;j<k&&poz!=-1;j++)
				poz=afla(j,poz);
			if(poz!=-1)
				if(poz-i+1<min)
					min=poz-i+1;



		}
	}


	if(min==5002)
		fout<<"-1\n";
	else
	fout<<min<<'\n';
	return 0;
	}