Pagini recente » Cod sursa (job #115114) | Cod sursa (job #22626) | Cod sursa (job #2700080) | Cod sursa (job #628697) | Cod sursa (job #587498)
Cod sursa(job #587498)
#include <cstdio>
#include <cstdlib>
#include <string>
#define INF 10000
int cmp(const void *a, const void *b){
return (*(int*)a-*(int*)b);
}
int main(){
freopen("secv.in", "r", stdin);
freopen("secv.out", "w", stdout);
int N, S[5010], T[5010], D[5010], L[5010], i, j, k, min;
scanf("%d", &N);
for(i=0; i<N; i++)
scanf("%d", S+i);
memcpy(T, S, sizeof(S));
qsort(T, N, sizeof(int), cmp);
j=0;
for(i=0; i<N; i++)
if(T[i]!=T[j])
T[++j]=T[i];
memset(D, -1, sizeof(D));
memset(L, 0, sizeof(L));
min=INF;
for(i=0; i<N; i++){
if(S[i]==T[0])
D[i]=0;
if(D[i]!=-1){
for(k=i+1; k<N && T[D[i]+1]!=S[k]; k++)
;
if(k<N){
D[k]=D[i]+1;
L[k]=L[i]+k-i;
if(D[k]==j){
D[k]=-1;
min=(L[k]<min)? L[k]: min;
}
}
}
}
printf("%d\n", (min==INF)? -1: min+1);
return 0;
}