Cod sursa(job #2770000)

Utilizator MarcGrecMarc Grec MarcGrec Data 18 august 2021 19:26:54
Problema Secv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#define MAX_N 5000

#include <iostream>
#include <fstream>
#include <set>
#include <map>
using namespace std;

ifstream fin("secv.in");
ofstream fout("secv.out");

int n, A[MAX_N + 1], DP[MAX_N + 1];
set<int> S;
map<int, int> M;

int main()
{
    fin >> n;
    
    for (int i = 1; i <= n; ++i)
    {
        fin >> A[i];
        S.insert(A[i]);
    }
    
    {
        int i = 0;
        for (int v : S)
        {
            M[v] = ++i;
        }
    }
    
    for (int i = 1; i <= n; ++i)
    {
        A[i] = M[A[i]];
    }
    
    const int un = S.size();
    
    int res = (n == 1) ? 1 : n + 1;
    
    for (int i = 1; i <= n; ++i)
    {
        if (A[i] == 1)
        {
            DP[A[i]] = i;
        }
        else
        {
            cout << A[i] << ' ' << DP[A[i]] << ' ';
            
            DP[A[i]] = DP[A[i] - 1];
            
            cout << DP[A[i]] << '\n';
            
            if ((A[i] == un) && (DP[A[i]] != 0))
            {
                const int len = i - DP[A[i]] + 1;
                
                if (res > len)
                {
                    res = len;
                }
            }
        }
    }
    
    if (res > n)
    {
        res = -1;
    }
    
    fout << res;
    
    fin.close();
    fout.close();
    return 0;
}