Pagini recente » Cod sursa (job #2487554) | Cod sursa (job #1937460) | Cod sursa (job #1791048) | Cod sursa (job #840635) | Cod sursa (job #828674)
Cod sursa(job #828674)
#include <cstdio>
#define val -1
#define NMAX 5005
#define INF (1 << 20)
int N, K;
int L[NMAX], A[NMAX], T[NMAX], P[NMAX];
FILE *fin = fopen("secv.in", "r");
FILE *fout = fopen("secv.out", "w");
void ReadData() {
int i;
fscanf(fin, "%d", &N);
for(i = 1; i <= N; ++ i) fscanf(fin, "%d", &A[i]);
}
void dis() {
int i, j;
bool ok;
P[++ K] = A[1];
for(i = 2; i <= N; ++ i) {
ok = true;
for(j = 1; j <= K; ++ j)
if(A[i] == P[j]) {
ok = false;
j = K + 2;
}
if(ok) P[++ K] = A[i];
}
}
void Solve() {
bool p = false;
int i, j, xmin, poz;
dis();
L[1] = 1; T[1] = 1;
for(i = 2; i <= N; ++ i) {
L[i] = 1;
T[i] = i;
xmin = val;
for(j = i - 1; j >= 1; -- j)
if(xmin < L[j] && A[j] < A[i]) xmin = L[j], poz = j;
if(xmin != val) {
L[i] = xmin + 1;
T[i] = T[poz];
}
}
for(i = 1; i <= N; ++ i)
if(L[i] == K) p = true;
if(!p) {
fprintf(fout, "-1\n");
return;
}
xmin = INF;
for(i = 1; i <= N; ++ i)
if(L[i] == K && xmin > i - T[i] + 1)
xmin = i - T[i] + 1;
fprintf(fout, "%d\n", xmin);
}
int main() {
ReadData();
Solve();
return 0;
}