Cod sursa(job #3342809)

Utilizator parus_majorParus Major parus_major Data 25 februarie 2026 19:04:20
Problema Secv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <climits>
#include <unordered_map>

using namespace std;

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

const int MAXN = 5002;

int A[MAXN], S[MAXN], dp[MAXN];
int N, M, min_len;
unordered_map<int, int> sorted_index;

int main()
{
    fin >> N;
    for (int i = 1; i <= N; ++i) {
        fin >> A[i];
        S[i] = A[i];
    }

    sort(S + 1, S + N + 1);
    M = 1;
    for (int i = 2; i <= N; ++i) {
        if (S[i] != S[M]) {
            S[++M] = S[i];
        }
    }

    sorted_index.reserve(M);
    for (int i = 1; i <= M; ++i) {
        sorted_index[S[i]] = i;
    }

    for (int i = 1; i <= M; ++i) dp[i] = -1;

    min_len = N + 1;
    for (int i = 1; i <= N; ++i) {
        int k = sorted_index[A[i]];
        if (k == 1) {
            dp[k] = i;
        } else {
            if (dp[k - 1] != -1) dp[k] = dp[k - 1];
        }

        if (k == M && dp[M] != -1) {
            int current_len = i - dp[M] + 1;
            if (min_len > current_len) min_len = current_len;
        }
    }

    if (min_len > N) min_len = -1;

    fout << min_len;

    return 0;
}