Cod sursa(job #1851181)

Utilizator vazanIonescu Victor Razvan vazan Data 19 ianuarie 2017 14:27:30
Problema Secv Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
#include<algorithm>
using namespace std;

#define NMAX 5100

bool cmp(int* a, int* b){
    if(*a > *b)
        return 0;
    return 1;
}

int main(){
    ifstream fin("secv.in");
    ofstream fout("secv.out");
    int n, v[NMAX], *cv[NMAX];
    fin >> n;
    for(int i = 1; i <= n; i++){
        fin >> v[i];
        cv[i] = &v[i];
    }
    v[0] = -1;
    cv[n + 1] = &v[1];
    sort(cv + 1, cv + n + 1, cmp);
    int last = *cv[1], inc = 1;
    *cv[1] = inc;
    for(int i = 2; i <= n; i++){
        if(*cv[i] != last){
            last = *cv[i];
            inc ++;
        }
        *cv[i] = inc;
    }
    int type[NMAX], dad[NMAX], best = NMAX;
    for(int i = 1; i <= inc; i++){
        type[i] = 0;
        dad[i] = 0;
    }
    for(int i = 1; i <= n; i++){
        type[v[i]] = i;
        dad[i] = type[v[i] - 1];
        if(dad[dad[i]] != 0)
            dad[i] = dad[dad[i]];
        if(v[i] == inc && i - dad[i] + 1 < best && v[dad[i]] == 1)
            best = i - dad[i] + 1;
    }
    if(best == NMAX)
        best = -1;
    if(inc == 1)
        best = 1;
    fout << best;
    return 0;
}