Cod sursa(job #2786899)

Utilizator Mihai_EduardMihai Eduard Mihai_Eduard Data 21 octombrie 2021 21:49:01
Problema Secv Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;
const int NMAX=5001;

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

int N, v[NMAX], a[NMAX], dp[NMAX], last[NMAX], total;

void solution()
{
    int minim=NMAX;
    for(int i=1;i<=N;i++)
    {
        if(dp[i]==total)
        {
            if(last[i]-i+1<minim){
                minim=last[i]-i+1;
            }
        }
    }
    if(minim==NMAX)
        fout<<-1;
    else
        fout<<minim;
}

int main()
{
    fin>>N;
    for(int i=1;i<=N;i++)
        fin>>v[i], a[i]=v[i];

    sort(a+1,a+N+1);
    total=1;
    for(int i=2;i<=N;i++)
        if(a[i]!=a[i-1])
            total++;

    int next, mx;
    dp[N]=1;
    last[N]=N;
    for(int i=N-1;i>=1;i--){
        mx=0;
        next=0;
        for(int j=i+1;j<=N;j++){
            if(v[j]>v[i] and dp[j]>mx){
                mx=dp[j];
                next=j;
            }
        }
        if(next){
            dp[i]=mx+1;
            last[i]=last[next];
        }
        else{
            dp[i]=1;
            last[i]=i;
        }
    }

    solution();

    return 0;
}