Pagini recente » Cod sursa (job #3335034) | Cod sursa (job #3331613) | Cod sursa (job #3355887) | Cod sursa (job #3334206) | Cod sursa (job #3342807)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <climits>
#include <unordered_map>
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
const int MAXN = 5002;
int A[MAXN], S[MAXN], dp[MAXN];
int N, M, min_len;
unordered_map<int, int> sorted_index;
int main()
{
fin >> N;
for (int i = 1; i <= N; ++i) {
fin >> A[i];
S[i] = A[i];
}
sort(S + 1, S + N + 1);
M = 1;
for (int i = 2; i <= N; ++i) {
if (S[i] != S[M]) {
S[++M] = S[i];
}
}
sorted_index.reserve(M);
for (int i = 1; i <= M; ++i) {
sorted_index[S[i]] = i;
}
for (int i = 1; i <= M; ++i) dp[i] = -1;
min_len = N;
for (int i = 1; i <= N; ++i) {
int k = sorted_index[A[i]];
if (k == 1) {
dp[k] = i;
} else {
if (dp[k - 1] != -1) dp[k] = dp[k - 1];
}
if (k == M && dp[M] != -1) {
int current_len = i - dp[M] + 1;
if (min_len > current_len) min_len = current_len;
}
}
fout << min_len;
return 0;
}