Cod sursa(job #1217280)

Utilizator smaraldaSmaranda Dinu smaralda Data 6 august 2014 23:57:46
Problema Secv Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#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);
    printf("%d\n", res);
    return 0;
}