Cod sursa(job #1711896)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 1 iunie 2016 15:16:37
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <bits/stdc++.h>

#define NMax 5005
#define INF 0x3f3f3f3f
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
struct asd{
    int nr,ind;
}dp[NMax];

int n,cont,ind,ANS,x;
int a[NMax];
map<int,int> M;

int main()
{
    f >> n;
    for(int i = 1; i <= n; ++i){
        f >> a[i];
        if(M[a[i]] == 0){
            cont++;
            M[a[i]]++;
        }
    }
    for(int i = n; i >= 1; --i){
        dp[i].nr = 1;
        ind = i;
        dp[i].ind = i;
        int mx = 0;
        for(int j = i + 1; j <= n; ++j){
            if(a[j] > a[i]){
                if(mx < dp[j].nr){
                    mx = dp[j].nr;
                    ind = dp[j].ind;
                }
            }
        }
        dp[i].nr += mx;
        dp[i].ind = ind;
    }
    int ANS = INF;
    for(int i = 1; i <= n; ++i){
        if(dp[i].nr == cont){
            ANS = min(ANS,dp[i].ind - i + 1);
        }
    }
    if(ANS == INF){
        g << -1  << '\n';
    }else
        g << ANS << '\n';
    return 0;
}