Cod sursa(job #539055)

Utilizator marius21Petcu Marius marius21 Data 22 februarie 2011 12:18:59
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <cstdlib>
#include <algorithm>

FILE *fin=fopen("secv.in","r");
FILE *fout=fopen("secv.out","w");

int a[5000];
int tmp[5000];
int d[5000];
int nr,n;
#define INF 0x3f3f3f3f 

void replace()
{
	nr=0;
	for (int i=0; i<n; i++)
	{
		int j;
		for (j=0; j<nr; j++)
			if (tmp[j]==a[i])
				break;
		if (j==nr)
			tmp[nr++]=a[i];
	}
	std::sort(tmp,tmp+nr);
	for (int i=0; i<n; i++)
		for (int j=0; j<nr; j++)
			if (a[i]==tmp[j])
			{
				a[i]=j;
				break;
			}
}

int main (int argc, char * const argv[]) {
	fscanf(fin, "%d",&n);
	for (int i=0; i<n; i++)
		fscanf(fin, "%d",&a[i]);
	replace();
	for (int i=0; i<nr; i++)
		d[i]=-1;
	int min = INF;
	for (int i=0; i<n; i++)
	{
		if (!a[i])
			d[0]=i;
		else
			d[a[i]]=d[a[i]-1];
		if ((a[i]==nr-1)&&(d[a[i]]!=-1))
			if (i-d[a[i]]+1<min)
				min=i-d[a[i]]+1;
	}
	if (min==INF)
		min=-1;
	fprintf(fout, "%d\n",min);
	fclose(fin);
	fclose(fout);
    return 0;
}