Cod sursa(job #2131107)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 14 februarie 2018 12:52:14
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax = 5005;
int v[1+nmax],aux[1+nmax],dp[1+nmax],start[1+nmax];

int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    int n;
    cin >> n;
    int nrmin = 2000000005;
    for(int i = 1;i <= n;i ++)
    {
        cin >> v[i];
        aux[i] = v[i];
        if(v[i] < nrmin)
            nrmin = v[i];
        start[i] = i;
    }
    sort(aux+1,aux+n+1);
    int nr = 1;
    for(int i = 2;i <= n;i ++)
        if(aux[i] != aux[i-1])
            nr ++;
    for(int i = 1;i <= n;i ++)
        if(v[i] == nrmin)
            dp[i] = 1;
    for(int i = 1;i <= n;i ++)
    {
        for(int j = i-1;j >= 1;j --)
        {
            if(v[j] < v[i] && dp[j] + 1 > dp[i])
            {
                dp[i] = dp[j]+1;
                start[i] = start[j];
            }
        }
    }
    int sol = 5005;
    for(int i = 1;i <= n;i ++)
    {
        if(dp[i] == nr && i-start[i]+1 < sol)
            sol = i-start[i]+1;
    }
    if(sol == 5005)
        sol = -1;
    cout << sol;
    return 0;
}