Pagini recente » Cod sursa (job #2693380) | Cod sursa (job #1095120) | Cod sursa (job #2662067) | Monitorul de evaluare | Cod sursa (job #2871836)
#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 ] );
}
cout << rez << '\n';
return 0;
}