Cod sursa(job #1569212)

Utilizator ionutpop118Pop Ioan Cristian ionutpop118 Data 15 ianuarie 2016 10:03:17
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <algorithm>
using namespace std;
struct numar
{
    int x, poz;
};
numar aux[5005];
int v[5005], last[5005];
bool cmp(numar a, numar b)
{
    return a.x < b.x;
}
int main()
{
    freopen("secv.in", "r", stdin);
    freopen("secv.out", "w", stdout);
    int n, nr;
    scanf("%d", &n);
    for (register int i = 1; i <= n; ++i)
    {
        scanf("%d", &v[i]);
        aux[i].x = v[i];
        aux[i].poz = i;
    }

    sort (aux + 1, aux + n + 1, cmp);
    v[aux[1].poz] = nr = 1;
    for (register int i = 2; i <= n; ++i)
    {
        if (aux[i].x != aux[i - 1].x)
            ++nr;

        v[aux[i].poz] = nr;
    }
    //nr ramane nr de numere diferite

    /* for (register int i = 1; i <= n; ++i)
        printf("%d ", v[i]); */

    int minim = -1;
    for (register int i = 1; i <= n; ++i)
    {
        if (v[i] == 1)
            last[1] = i;
        else
            if (last[v[i] - 1] != 0)
                last[v[i]] = last[v[i] - 1];

        if(v[i] == nr && last[nr] != 0)
            if (i - last[nr] + 1 < minim || minim == -1)
                minim = i - last[nr] + 1;
    }

    if (n != 0)
        printf("%d\n", minim);
    return 0;
}