Pagini recente » Cod sursa (job #218457) | Cod sursa (job #414346) | Cod sursa (job #1019016) | Cod sursa (job #2350287) | Cod sursa (job #2871841)
#include <algorithm>
#include <fstream>
#define MAX 5001
using namespace std;
ifstream cin( "secv.in" );
ofstream cout( "secv.out" );
struct Andrei {
int val, poz;
};
bool cmp( const Andrei& a, const Andrei& b ) {
return ( a.val < b.val );
}
Andrei a[ MAX + 1 ];
int poz[ MAX + 1 ];
int dp[ MAX + 1 ];
int v[ MAX + 1 ];
int n;
int main()
{
cin >> n;
for( int i = 1; i <= n; i++ ) {
cin >> a[ i ].val;
a[ i ].poz = i;
}
sort( a + 1, a + n + 1, cmp );
int no = 1;
v[ a[ 1 ].poz ] = no;
for( int i = 2; i <= n; i++ )
if( a[ i ].val != a[ i - 1 ].val )
v[ a[ i ].poz ] = ++no;
else v[ a[ i ].poz ] = no;
int rez = ( 1 << 30 );
for( int i = 1; i <= n; i++ ) {
poz[ v[ i ] ] = i;
if( v[ i ] == 1 )
dp[ i ] = 1;
else dp[ i ] = ( dp[ poz[ v[ i ] - 1 ] ] + i - poz[ v[ i ] - 1 ] ) * ( dp[ poz[ v[ i ] - 1 ] ] > 0 );
if( v[ i ] == no && dp[ i ] != 0 )
rez = min( rez, dp[ i ] );
}
if( rez == ( 1 << 30 ) )
cout << "-1\n";
else cout << rez << '\n';
return 0;
}