Cod sursa(job #3142458)

Utilizator xDemonstyMatei Haba Ionut xDemonsty Data 21 iulie 2023 14:23:17
Problema Secv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.4 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 ];
map<long long, long long > dp ;

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

    vector<long long > a;
    long long dist = 1e9;
    long long maxx = -1;
    dp [ 0 ] = -1;
    for ( int i = 1; i <= n ; i ++ )
    {
        cin >> v [ i ] ;
        maxx = max ( maxx, v[ i ] );
        dp [ v [ 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 ( mp [ v[ i ] ] == 0  )
        {
            dp [ v [ i ] ] = i ;

            if ( v [ i ] == maxx)
                dist = 1 ;
        }
        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;
}