Cod sursa(job #1700685)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 10 mai 2016 23:39:20
Problema Secv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
///Promit ca voi trimite in curand o sursa decenta!
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 5005;
const int INF  = 1e9;

int nums;
int    v[NMAX],
     aux[NMAX],
    vals[NMAX],
    lsta[NMAX],
    lens[NMAX];

bool  ex[NMAX];

inline void init_aux(int n) {
    ex[0] = true;

    sort(aux+1, aux+n+1);
    for(int i=1; i<=n; ++i)
        if(aux[i]!=aux[i-1])
            vals[++nums] = aux[i];
}

int main(void) {
    FILE *fi = fopen("secv.in","r");
    FILE *fo = fopen("secv.out","w");
    int n;
    int i, t, ans;

    ans = INF;

    fscanf(fi,"%d",&n);
    for(i=1; i<=n; ++i) {
        fscanf(fi,"%d",&v[i]);
        aux[i] = v[i];
    }

    init_aux(n);
    for(i=1; i<=nums; ++i) {
        lens[i] = INF;
        lsta[i] = 0;
    }

    for(i=1; i<=n; ++i) {
        t = v[i];

        lsta[t] = i;
        ex[t] = ex[t] || ex[t-1];
        if(ex[t-1]) {
            if(t==vals[1])
                lens[t] = 0;
            else
                lens[t] = lens[t-1] + i - lsta[t-1];

            if(t==nums && lens[t]<ans)
                ans = lens[t];
        }
    }

    fprintf(fo,"%d\n",ans+1);

    fclose(fi);
    fclose(fo);
    return 0;
}