Cod sursa(job #3142451)

Utilizator xDemonstyMatei Haba Ionut xDemonsty Data 21 iulie 2023 13:56:59
Problema Secv Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
ifstream cin("secv.in");
ofstream cout("secv.out");

long long n ;
long long v [ 50001 ];
long long dp [ 50001 ];


map<long long , int> mp ;
map<long long , int> frv;
int main()
{
    cin >> n;

    vector<long long > a;
    long long dist = 1e9;
    long long maxx = -1;
    for ( int i = 1; i <= n ; i ++ )
    {
        cin >> v [ i ] ;
        maxx = max ( maxx , v[ i ] );
        dp [ i ] = -1;

        frv [v [ i ]] ++ ;

        if ( frv [v[ i ] ]  == 1 )
            a.push_back(v [ i ]);
    }

    sort ( a.begin() , a.end() );

    for ( int i = 0 ; i < a.size() ; i ++ )
    {
        mp [ a[ i ]] = i ;
    }
    for ( int i = 1; i <= n ; i ++ )
    {
        if ( v [ i ] == 1 )
            dp [ 1 ] = i;
        else
        {
            if ( dp [ a [ mp [ v[ i ] ] - 1 ]]  != -1)
            {
                dp [ v [ i] ] = dp [ a [ mp [ v[ i ] - 1  ]  ] ] ;

                if ( v [ i ] == maxx  )
                    dist =  min(i - dp [ v[ i ]] + 1, dist) ;
            }

        }
    }

    if ( dist == 1e9 )
        cout << -1 << '\n';
    else
        cout << dist << '\n';
    return 0;
}