Cod sursa(job #1483091)

Utilizator BLz0rDospra Cristian BLz0r Data 8 septembrie 2015 18:04:07
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#include <algorithm>
using namespace std;

#define Nmax 5002

FILE *f = fopen ( "secv.in", "r" );
FILE *g = fopen ( "secv.out", "w" );

int v[Nmax], ind[Nmax], norm[Nmax];

bool cmp ( int x, int y ){
    return v[x] < v[y];
}

int main(){

    int N;

    fscanf ( f, "%d", &N );
    for ( int i = 1; i <= N; ++i ){
        fscanf ( f, "%d", &v[i] );
        norm[i] = v[i];
        ind[i] = i;
    }

    sort ( ind + 1, ind + N + 1, cmp );
    sort ( norm + 1, norm + N + 1 );

    int nr = 0;
    int ultim = -1;
    for ( int i = 1; i <= N; ++i ){
        if ( norm[i] != ultim ){
            ultim = norm[i];
            norm[i] = (++nr);
        }
        else
            norm[i] = nr;
    }

    for ( int i = 1; i <= N; ++i )
        v[ind[i]] = norm[i];

    int poz, minlg = N+1;

    for ( int i = 1; i <= N; ++i ){
        int what = 1;
        poz = i;
        for ( int j = i; j <= N; ++j ){
            if ( v[j] == what ){
                what++;
                poz = j;
            }
        }
        if ( what > nr )
            minlg = min ( minlg, poz - i + 1 );
    }

    if ( minlg > N )
        minlg = -1;

    fprintf ( g, "%d", minlg );

    return 0;
}