Pagini recente » Cod sursa (job #1472688) | Cod sursa (job #53334) | Cod sursa (job #2678593) | Cod sursa (job #2946755) | Cod sursa (job #1847449)
#include <cstdio>
#include <algorithm>
int v[5001], f[5001], *p[5001];
int n, dif=1;
using namespace std;
bool cmp( int *a, int *b )
{
return *a<*b;
}
void normalizare( )
{
int last, i;
for( i=1;i<=n;i++ )
p[i]=&v[i];
sort(p+1,p+n+1,cmp);
last=*p[1];
for( i=1;i<=n;i++ )
{
if( *p[i]==last )
*p[i]=dif;
else
{
dif++;
last=*p[i];
*p[i]=dif;
}
}
}
int subsir( int a, int b )
{
int i, j=1;
for( i=a;i<=b && j<=dif;i++ )
if( v[i]==j )
j++;
return (j==dif+1);
}
int main()
{
freopen( "secv.in", "r", stdin );
freopen( "secv.out", "w", stdout );
int i, st, dr, cnt=0, lmin;
scanf( "%d", &n );
for( i=1;i<=n;i++ )
{
scanf( "%d", &v[i] );
}
normalizare();
st=dr=1;
lmin=n+1;
while( dr<=n )
{
f[v[dr]]++;
if( f[v[dr]]==1 )
cnt++;
while( cnt==dif && st<=dr )
{
if( dr-st+1<lmin && subsir(st,dr) )
lmin=dr-st+1;
f[v[st]]--;
if( f[v[st]]==0 )
cnt--;
st++;
}
if( dr-st+2<lmin && subsir(st-1,dr) )
lmin=dr-st+2;
dr++;
}
printf( "%d", lmin );
return 0;
}