Pagini recente » Cod sursa (job #512907) | Cod sursa (job #147356) | Cod sursa (job #522892) | Cod sursa (job #657242) | Cod sursa (job #1217281)
#include<stdio.h>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
const int NMAX = 5000;
vector <int> x, bs;
vector <int>::iterator it;
set <int> normal;
set <int>::iterator nit;
int n, d[NMAX + 5];
int main() {
freopen("secv.in", "r", stdin);
freopen("secv.out", "w", stdout);
int i, val, j, res;
scanf("%d", &n);
if(n == 0) {
printf("0\n");
return 0;
}
for(i = 1; i <= n; ++ i) {
scanf("%d", &val);
x.push_back(val);
normal.insert(val);
}
for(nit = normal.begin(); nit != normal.end(); ++ nit)
bs.push_back(*nit);
for(it = x.begin(); it != x.end(); ++ it)
*it = lower_bound(bs.begin(), bs.end(), *it) - bs.begin();
for(i = 0; i < x.size(); ++ i) {
d[i] = -1;
if(x[i] == 0) {
d[i] = i;
continue;
}
for(j = i - 1; j >= 0; -- j)
if(x[j] == x[i] - 1 && d[j] > d[i])
d[i] = d[j];
}
res = x.size() + 1;
for(i = 0; i < x.size(); ++ i)
if(x[i] == normal.size() - 1 && d[i] != -1)
res = min(res, i - d[i] + 1);
if(res == x.size() + 1)
res = -1;
printf("%d\n", res);
return 0;
}