Pagini recente » Cod sursa (job #1025923) | Cod sursa (job #2661637) | Cod sursa (job #2278256) | Cod sursa (job #1213911) | Cod sursa (job #1815795)
#include <cstdio>
#include <algorithm>
const int MAX_N = 5000;
int v[MAX_N], din[MAX_N], first[MAX_N], v2[MAX_N];
int main() {
int n, dist, max, size;
FILE *fin = fopen("secv.in", "r");
fscanf(fin, "%d", &n);
for(int i = 0; i < n; ++i) {
fscanf(fin, "%d", &v[i]);
v2[i] = v[i];
}
fclose(fin);
std::sort(v2, v2 + n);
dist = 1;
for(int i = 1; i < n; ++i) {
if(v2[i] != v2[i - 1])
dist++;
}
for(int i = 0; i < n; ++i) {
first[i] = i;
din[i] = 1;
for(int j = 0; j < i; ++j)
if(v[i] > v[j] && din[j] + 1 > din[i]) {
din[i] = din[j] + 1;
first[i] = first[j];
} else if(v[i] > v[j] && din[j] + 1 == din[i] && first[j] > first[i])
first[i] = first[j];
}
FILE *fout = fopen("secv.out", "w");
max = size = -1;
for(int i = 0; i < n; ++i)
if(din[i] > max) {
max = din[i];
size = i - first[i] + 1;
} else if(din[i] == max && i - first[i] + 1 < size)
size = i - first[i] + 1;
if(max == dist)
fprintf(fout, "%d", size);
else
fprintf(fout, "-1");
fclose(fout);
return 0;
}