Cod sursa(job #990332)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 27 august 2013 23:05:45
Problema Secv Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <unordered_map>

using namespace std;

#define Nmax 5002

unordered_map <int, bool> h;

int a[Nmax];
int b[Nmax];

int N, M;
int best = 0x3f3f3f;

void read()
{
    ifstream f("secv.in");

    f >> N;

    for ( int i = 1; i <= N; ++i )
    {
        f >> a[i];

        if ( h[ a[i] ] == 0)
        {
            h[ a[i] ] = 1;
            b[ ++M ] = a[i];
        }
    }

    f.close();
}

void solve()
{
    for ( int i = 1; i < N; ++i )
            if ( a[i] == b[1] )
            {
                int matched = 1;

                for ( int j = i + 1; j <= N; ++j )
                {

                    if ( a[j] == b[ matched + 1 ] )
                            matched++;

                    if ( matched == M )
                    {
                        best = min( best, j - i );
                        break;
                    }
                }
            }
}

void print()
{
    ofstream g("secv.out");

    if ( best == 0x3f3f3f )
            g << "-1\n";
    else
            g << best << "\n";

    g.close();
}

int main()
{
    read();
    sort( b + 1, b + M + 1 );
    solve();
    print();

    return 0;
}