Cod sursa(job #1221772)

Utilizator ion824Ion Ureche ion824 Data 21 august 2014 14:07:23
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
#include<algorithm>
using namespace std;

int a[5003],b[5003];
int p[5003],v[5003],l[5003];

int main(){
	ifstream cin("secv.in");
	ofstream cout("secv.out");
	int N,i,j,K;
	int LMIN = 5003, VMAX;
	
	cin>>N;
	
	if(N == 0)
	{
		cout<<"-1\n";
		return 0;
	}
	
	if(N == 1)
	{
		cout<<"1\n";
		return 0;
	}
	
	for(i=1;i<=N;++i)
	{
		cin>>a[i];
		a[i] += 2;
		b[i]=a[i];
	}
	
	sort(b+1,b+N+1);
	
	K = 1;
	for(i=1;i<=N;++i)
	{
		for(j=1;j<=N;++j)
		  if(a[j] == b[i])
		    a[j] = K;
		
		++K;
		while(i<N && b[i] == b[i+1]) ++ i;
	}
	
	//for(i=1;i<=N;++i)
	//  cout<<a[i]<<' ';
	
	VMAX = K-1;
	
	for(i=1;i<=N;++i)
	{
		if(a[i] > 1)
		{
			if(p[a[i]-1] != 0 && v[a[i]-1] == a[i]-1)
			{
				v[a[i]] = a[i];
				l[a[i]] = l[a[i]-1] + (i - p[a[i]-1]);
				p[a[i]] = i;
			}
		}
		else
		{
			v[1] = 1;
			l[1] = 1;
			p[1] = i;
		}
		
		if(a[i] == VMAX && v[VMAX] == VMAX) LMIN = min(LMIN, l[VMAX]);
	}
	
	if(LMIN == 5003) cout<<"-1\n";
	else cout<<LMIN<<'\n';
	
	return 0;
}