Cod sursa(job #2467286)

Utilizator shantih1Alex S Hill shantih1 Data 3 octombrie 2019 22:31:07
Problema Secv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#define nmx 5005
//10:07
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");

int n, i, j, nr, p, stp, lsr, sestp, rez;
int v[nmx], sr[nmx], id[nmx];

int main () {
    
    fin >> n;
    for (i = 1; i <= n; i++)    {
        fin >> v[i];
        sr[i] = v[i];
    }
    sort(sr + 1, sr + n + 1);
    
    j = 1;
    for (i = 2; i <= n; i++)    {
        if (sr[i] != sr[i - 1]) {
            sr[++j] = sr[i];
        }
    }
    lsr = j;
    
    for (stp = 1; stp <= lsr; stp <<= 1);
    sestp = (stp >> 1);
    
    for (i = 1; i <= n; i++)    {
        for (stp = sestp, p = 0; stp > 0; stp >>= 1)  {
            if (p + stp < lsr && sr[p + stp] < v[i])
                p += stp;
        }
        v[i] = p + 1;
    }
    
    rez = n + 1;
    for (i = 1; i <= n; i++)    {
        id[0] = i;
        if (id[v[i] - 1])   {
            id[v[i]] = id[v[i] - 1];
            if (v[i] == lsr)
                rez = min( rez, i - id[lsr] + 1);
        }
    }
    
    if (rez == n + 1)   rez = -1;
    fout << rez << "\n";
}