Cod sursa(job #2011479)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 16 august 2017 13:29:45
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX = 5005;
struct ABC
{
    int nr, poz;
};
int v[NMAX];
ABC a[NMAX];
bool cmp(ABC first, ABC second)
{
    return first.nr < second.nr;
}

int main()
{
    int minim = (1LL << 31) - 1, n, i, j, x, k = 0;
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    scanf("%d", &n);
    for(i = 1;i <= n; ++i) {
        scanf("%d", &x);
        a[i].nr = x;
        a[i].poz = i;
    }
    a[0].nr = -1;
    sort(a + 1, a + n + 1, cmp);
    for(i = 1;i <= n; ++i) {
        if(a[i].nr != a[i - 1].nr) {
            k++;
        }
        v[a[i].poz] = k;
    }
    for(i = 1;i <= n; ++i) {
        if(v[i] == 1) {
            int p = 2;
            for(j = i + 1;j <= n && p <= k; ++j) {
                if(v[j] == 1 && p == 2) {
                    i = j;
                }
                if(v[j] == p) {
                    ++p;
                }
            }
            if(p > k) {
                minim = min(minim, j - i);
            }
        }
    }
    if(minim == (1LL << 31) - 1) {
        minim = -1;
    }
    printf("%d\n", minim);
    return 0;
}