Cod sursa(job #1847585)

Utilizator PondorastiAlex Turcanu Pondorasti Data 14 ianuarie 2017 19:16:04
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
#include <algorithm>
using namespace std;
struct Pozitie
{
	int nr, poz;
};
bool cmp( Pozitie a, Pozitie b )
{
	return a.nr < b.nr;
}
Pozitie a[5005];
int v[5005];
int main()
{
	freopen( "secv.in", "r", stdin );
	freopen( "secv.out", "w", stdout );
	int n, x, k = 0, min1 = 5005, i, j;
	scanf( "%d", &n );
	for( i = 1; i <= n; ++i )
	{
		scanf( "%d", &x );
		a[i].nr = x;
		a[i].poz = i;
	}
	a[0].nr = -1;
	sort( a + 1, a + n + 1, cmp );
	for( i = 1; i <= n; ++i ) {
		if( a[i].nr != a[i - 1].nr )
			k++;
		v[a[i].poz] = k;}
	for( i = 1; i <= n; ++i )
		if( v[i] == 1 ) {
			int p = 2;
			for( j = i + 1; j <= n && p <= k; ++j ) {
				if( v[j] == 1 && p == 2 )
					i = j;
				if( v[j] == p )
					++p;}
			if( p > k )
				min1 = min( min1, j - i );}
	if( min1 == 5005 )
		min1 = -1;
	printf( "%d", min1 );
	return 0;}