Cod sursa(job #546721)

Utilizator alutzuAlexandru Stoica alutzu Data 5 martie 2011 13:54:49
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<cstdio>
#include<algorithm>

using namespace std; 

struct QQ { int p , v ; } ;

QQ x[5002] ;

bool comp ( QQ a , QQ b ) 
{
	return ( a.v < b.v || ( a.v == b.v && a.p < b.p ) ) ;
}

int v [ 5002 ] , p[ 5002 ] ;

int main ( )
{
	
	freopen ( "secv.in", "r", stdin ) ;
	freopen ( "secv.out", "w", stdout ) ;
	
	int n , val , i ;
	int r = 5010;
	scanf ( "%d" , &n ) ;
	
	for ( i = 1 ; i <= n ; ++ i )
	{
		scanf ( "%d", & x[i].v ) ;
		x[i].p = i ;
	}
	sort ( &x[1] , &x[n+1] , comp ) ;
	
	v[x[1].p] = 1 ;
	val = 1 ;
	for ( i = 2 ; i <= n ; ++ i )
	{
		if ( x[i].v != x[i-1].v )
			++val;
		v[x[i].p]=val;
	}
	
	/*for ( i = 1 ; i <= n ; ++ i )
		printf ( "%d %d\n" , x[i].v , x[i].p ) ;
	printf ( "\n" ) ;
	
	for ( i = 1 ; i <= n ; ++ i )
		printf ( "%d ", v[i] ) ;
	printf ( "\n" ) ;*/
	for ( i = 1 ; i <= n ; ++ i )
	{
		if ( v[i] == 1 )
			p[v[i]] = i ;
		else
			p[ v[i] ] = p[ v[i]-1 ];
		if ( v[i] == val )
		{
			if ( p[ v[i] ] != 0 )
				r = min ( r , i-p[ v[i] ] + 1 ) ;
		}
	}
	if ( r == 5010 )
		printf ( "-1" ) ;
	else
		printf ( "%d" , r ) ;
	return 0 ;
}