Cod sursa(job #1830883)

Utilizator antanaAntonia Boca antana Data 17 decembrie 2016 11:16:02
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include <algorithm>

#define MAXN 5000
#define INF 0x3f3f3f3f

struct numar{
    int idx, value;

    bool operator <(const numar &aux) const{
        return (value < aux.value);
    }
}nr[MAXN];

int v[MAXN], d[MAXN];

int main()
{
    freopen("secv.in", "r", stdin);
    freopen("secv.out", "w", stdout);

    int i, n, ans = INF, x, j;


    scanf("%d", &n);

    for(i=0; i<n; ++i){
        scanf("%d", &nr[i].value);
        nr[i].idx = i;
    }

    std::sort(nr, nr+n);

    x = 0;
    v[nr[0].idx] = 0;
    d[0] = -1;
    for(i=1; i<n; ++i)
    {
        if(nr[i].value > nr[i-1].value) x++;
        v[nr[i].idx] = x;
        d[i] = -1;
    }

    for(i=0; i<n; ++i)
    {
        if(v[i] == 0)
            d[i] = i;

        else
        {
            for(j=i-1; j>=0; --j)
            {
                if(v[j] == v[i]-1 && d[j] != -1){
                    d[i] = d[j];
                    break;
                }
            }
        }
    }

    for(i=0; i<n; ++i)
        if(d[i] != -1 && v[i] == x)
            if(i-d[i]+1 < ans)
                ans = i-d[i]+1;

    if(ans != INF)
        printf("%d", ans);
    else printf("-1");

    return 0;
}