Cod sursa(job #2018887)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 6 septembrie 2017 12:02:39
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 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);
    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])
                st = mij+1;
            else dr = mij-1;
        }
        d[i] = st;
    }

    /*for (i = 1; i <= n; i++)
        g << d[i] << ' ';
    g << '\n';*/

    for (i = 1; i <= n; i++)
        if (d[i] == 1) {
            k = 2;
            j = i+1;
            for (;k <= m && j <= n; j++)
                if (d[j] == k)
                    k++;
            //g << k << ' ' << j << ' ' << i << '\n';
            if (j-i < minim && k > m) minim = j-i;
        }
    if (minim != 10000)
        g << minim;
    else g << -1;
}