Cod sursa(job #2861706)

Utilizator lolismekAlex Jerpelea lolismek Data 4 martie 2022 12:08:33
Problema Secv Scor 60
Compilator cpp-64 Status done
Runda tastaturi_qwertykey Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int N = 5000, inf = 2e9 + 1;
int v[N + 1], dp[N + 1], start[N + 1];

int main(){
    int n, mini = inf, distincte = 0;
    fin >> n;
    for(int i = 1; i <= n; i++) fin >> v[i], mini = min(mini, v[i]);
    for(int i = 1; i <= n; i++)
        if(v[i] == mini)
            dp[i] = 1, start[i] = i;
    for(int i = 1; i <= n; i++){
        if(v[i] != mini){
            int maxi = -1, jchoice = -1;
            for(int j = i - 1; j >= 1; j--)
                if(v[j] < v[i] && dp[j] > maxi && start[j])
                    maxi = dp[j], jchoice = j;
            if(jchoice != -1) dp[i] = dp[jchoice] + 1, start[i] = start[jchoice];
        }
    }

    sort(v + 1, v + n + 1);
    v[0] = -1;
    for(int i = 1; i <= n; i++)
        if(v[i] != v[i - 1]) distincte++;
    int ans = inf;
    for(int i = 1; i <= n; i++)
        if(dp[i] == distincte)
            ans = min(ans, i - start[i] + 1);
    fout << ans;
    return 0;
}