Cod sursa(job #337103)

Utilizator rumburakrumburak rumburak Data 2 august 2009 16:15:15
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;

const int N = (1<<13);
const int oo = (1<<14);

vector<pair<int,int> > v;
int k,n,x[N],poz[N],lung[N],rez[N];

void citire()
{
	scanf("%d",&n);
	for(int i=0,x;i<n;++i)
	{
		scanf("%d",&x);
		v.push_back(make_pair(x,i));
	}
}

void prel_x()
{
	sort(v.begin(),v.end());
	x[1+v[0].second]=++k;
	rez[1]=oo;
	for(int i=1;i<n;++i)
	{
		if(v[i].first!=v[i-1].first)
			rez[++k]=oo;
		x[1+v[i].second]=k;
	}
}

void calcul()
{
	for(int i=1;i<=n;++i)
		if(x[i]==1 || poz[x[i]-1])
		{
			poz[x[i]]=i;
			if(x[i]==1)
			{
				lung[i]=1;
				rez[x[i]]=1;
			}
			else
			{
				lung[i]=lung[poz[x[i]-1]]+i-poz[x[i]-1];
				rez[x[i]]=min(rez[x[i]],lung[i]);
			}
		}
	printf("%d\n",rez[k]==oo ? -1 : rez[k]);
}

int main()
{
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
	citire();
	prel_x();
	calcul();
	return 0;
}