Cod sursa(job #1330130)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 30 ianuarie 2015 13:46:22
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
#include <algorithm>
#include <vector>

#define Nmax 5000 + 10

using namespace std;

int n , i , j , poz , crt , M , SOL;

int A[Nmax];

vector < int > V;

vector < int > :: iterator it;

int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);

    scanf("%d", &n);

    for (i = 1; i <= n; ++i)
    {
        scanf("%d", &A[i]);
        V.push_back(A[i]);
    }

    sort( V.begin() , V.end() );
    it = unique( V.begin() , V.end() );
    V.resize( distance ( V.begin() , it ) );

    for (i = 1; i <= n; ++i)
    {
        A[i] = lower_bound( V.begin() , V.end() , A[i] ) - V.begin() + 1;
        M = max( M , A[i] );
    }

    for (SOL = n + 1, i = 1; i <= n; ++i)
    {
        for (crt = 0 , j = i; j <= n && j - i + 1 <= SOL; ++j)
        {
            if (A[j] == crt + 1) ++crt;
            if (crt == M) SOL = j - i + 1;
        }
    }

    if (SOL == n + 1) printf("-1\n");
    else printf("%d\n", SOL);

    return 0;
}