Cod sursa(job #545326)

Utilizator nightwish0031Vlad Radu Cristian nightwish0031 Data 3 martie 2011 09:17:34
Problema Secv Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 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]; if (maxt<x[v[i].second]) maxt=x[v[i].second];}
	else { x[v[i].second]=1+x[v[i-1].second]; if (maxt<x[v[i].second]) maxt=x[v[i].second]; }
}

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

	printf("%d",min);
}

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