Cod sursa(job #545331)

Utilizator nightwish0031Vlad Radu Cristian nightwish0031 Data 3 martie 2011 09:24:59
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;
const int N=5001;

vector <pair < int,int > > v(N);
int x[N];
int p[N],u[N];
int n,maxt;

void files()
{
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
}

void read()
{
	int i;
	files();
	scanf("%d",&n);
	for (i=1;i<=n;++i)
	{
		scanf("%d",&v[i].first);
		v[i].second=i;
	}
}

void transform()
{
	int i;
	
	maxt=-1;
	sort(&v[1],&v[n+1]);
	x[v[1].second]=1;
	for (i=2;i<=n;++i)
		if (v[i].first==v[i-1].first) x[v[i].second]=x[v[i-1].second]; 
	else  x[v[i].second]=1+x[v[i-1].second]; 
}

void determine_max()
{
	int i;
	maxt=-1;
	for (i=1;i<=n;++i)
		if (x[i]>maxt) maxt=x[i];
}

void solve()
{
	int i,min=999999;
	transform();
	determine_max();
	for (i=1;i<=n;++i)
	{
	
		if (x[i]==1)
		{
			u[1]=i;
			p[1]=i;
		}
		else
		{
			u[x[i]]=i;
			p[x[i]]=p[x[i]-1];
		}
		
		if (x[i]==maxt)
			if (u[x[i]]-p[x[i]]+1<=min&&p[x[i]]) min=u[x[i]]-p[x[i]]+1;
	}

	if (min==999999) min=-1;
	printf("%d",min);
}

int main()
{	
	read();
	solve();
	
	return 0;
}