Pagini recente » Cod sursa (job #2588806) | Cod sursa (job #1992594) | Cod sursa (job #2620620) | Cod sursa (job #2770206) | Cod sursa (job #2408023)
#include <bits/stdc++.h>
using namespace std ;
const int NR = 5005 , oo = 5005 ;
ifstream in ("secv.in") ;
ofstream out ("secv.out") ;
int v [ NR ] , p [ NR ] , n , r [ NR ] , cnt = 1 , sw [ NR ] , sol = oo ;
vector < int > d ( NR , oo ) ;
inline bool cmp ( const int i , const int j ) {
return v [ i ] < v [ j ] ;
}
int main ()
{
int i ;
in >> n ;
for ( i = 1 ; i <= n ; ++ i ) {
in >> v [ i ] ;
p [ i ] = i ;
}
sort ( p + 1 , p + n + 1 , cmp ) ;
r [ p [ 1 ] ] = 1 ;
for ( i = 2 ; i <= n ; ++ i ) {
if ( v [ p [ i ] ] != v [ p [ i - 1 ] ] )
r [ p [ i ] ] = ++ cnt ;
else
r [ p [ i ] ] = cnt ;
} // r este de fapt v normalizat
// sw [ i ] - ultima pozitie pe care apare i daca exista subsirul 1 - i
for ( i = 1 ; i <= n ; ++ i ) {
if ( r [ i ] == 1 ) sw [ 1 ] = i , d [ 1 ] = 1 ;
if ( sw [ r [ i ] - 1 ] ) d [ r [ i ] ] = i - sw [ r [ i ] - 1 ] + d [ r [ i ] - 1 ] , sw [ r [ i ] ] = i ;
if ( r [ i ] == cnt ) sol = min ( sol , d [ cnt ] ) ;
}
if ( sol == oo ) out << -1 ;
else out << sol ;
}