Cod sursa(job #2018896)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 6 septembrie 2017 12:13:16
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("secv.in");
ofstream g("secv.out");

int n, i, j, m, k, minim = 10000;
int a[5005], b[5005], c[5005], d[5005];

int main() {
    f >> n;
    for (i = 1; i <= n; i++)
        f >> a[i], b[i] = a[i];

    sort(b+1, b+n+1);
    b[0] = -1;
    for (i = 1; i <= n; i++)
        if (b[i] != b[i-1])
            c[++m] = b[i];

    for (i = 1; i <= n; i++) {
        int st = 1, dr = m, mij;
        while (st <= dr) {
            mij = (st+dr)/2;
            if (a[i] == c[mij]) {
                d[i] = mij;
                break;
            }
            if (a[i] > c[mij])
                st = mij+1;
            else dr = mij-1;
        }
    }

    for (i = 1; i <= n; i++)
        if (d[i] == 1) {
            for (j = i+1, k = 2; k <= m && j <= n; j++)
                if (d[j] == k)
                    k++;

            if (j-i < minim && k > m) minim = j-i;
        }
    if (minim != 10000)
        g << minim;
    else g << -1;
}