Pagini recente » Cod sursa (job #1361434) | Cod sursa (job #2068423) | Cod sursa (job #334211) | Cod sursa (job #1051089) | Cod sursa (job #1082229)
#include <cstdio>
using namespace std;
int v[5010];
void qsort( int lo, int hi )
{
int i = lo, y = hi, mid = lo + ( hi - lo ) / 2, t, pivot = v[mid];
while ( i <= y )
{
while ( v[i] < pivot )
++i;
while ( v[y] > pivot )
--y;
if ( i <= y )
{
t = v[i];
v[i] = v[y];
v[y] = t;
++i;
--y;
}
}
if ( i < hi )
qsort( i, hi );
if ( y > lo )
qsort( lo, y );
}
int main()
{
freopen( "secv.in", "r", stdin );
freopen( "secv.out", "w", stdout );
int i, n, y, maxuniq = 0, minim = 99999;
short pd[5010], prev[5010];
scanf( "%d\n", &n );
for ( i = 1; i <= n; ++i )
scanf( "%d ", &v[i] );
for ( i = 1; i <= n; ++i )
{
pd[i] = 1;
prev[i] = i;
for ( y = i - 1; y; --y )
{
if ( ( v[y] < v[i] ) && ( pd[y] + 1 > pd[i] ) )
{
pd[i] = pd[y] + 1;
prev[i] = prev[y];
}
}
if ( ( pd[i] == maxuniq ) && ( i - prev[i] + 1 < minim ) )
{
minim = i - prev[i] + 1;
}
else
{
if ( pd[i] > maxuniq )
{
maxuniq = pd[i];
minim = i - prev[i] + 1;
}
}
}
qsort( 1, n );
int k = 0;
for ( i = 1; i <= n; ++i )
{
while ( v[i] == v[i+1] )
++i;
++k;
}
if ( k == maxuniq )
printf( "%d\n", minim );
else
printf( "-1\n" );
fclose( stdin );
fclose( stdout );
return 0;
}