Pagini recente » Cod sursa (job #454923) | Cod sursa (job #1236409) | Cod sursa (job #2108481) | Rating Scutariu Laurentiu (Laurentiu6996) | Cod sursa (job #2451633)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 5010;
int N, M;
int v[NMAX], cp[NMAX], nor[NMAX];
int dp[2][NMAX];
int main(){
freopen("secv.in", "r", stdin);
freopen("secv.out", "w", stdout);
scanf("%d", &M);
for(int i = 1; i <= M; i++){
scanf("%d", &v[i]);
cp[i] = v[i];
}
sort(cp, cp + M + 1);
for(int i = 1; i <= M; i++){
while(cp[i] == cp[i + 1] && i <= M) i++;
nor[++N] = cp[i];
}
if(N == 1){
printf("1");
return 0;
}
int line1, line2;
int ok = 0;
for(int i = 1; i <= M; i++){
if(v[i] == nor[1])
dp[0][i] = 1, ok = 1;
else if(ok) dp[0][i] = dp[0][i - 1] + 1;
}
for(int i = 2; i <= N; i++){
ok = 0;
line1 = (i + 1) % 2;
line2 = i % 2;
for(int j = 1; j <= M; j++){
if(v[j] == nor[i] && dp[line2][j - 1] != 0)
dp[line1][j] = dp[line2][j - 1] + 1, ok = 1;
else if(ok) dp[line1][j] = dp[line1][j - 1] + 1;
else dp[line1][j] = 0;
}
}
int ans = 2e9;
for(int i = 1; i <= M; i++){
if(dp[line1][i] != 0)
ans = min(ans, dp[line1][i]);
}
if(ans != 2e9) printf("%d", ans);
else printf("-1");
return 0;
}