Pagini recente » Cod sursa (job #1679792) | Borderou de evaluare (job #2116734) | Cod sursa (job #3267383) | Cod sursa (job #29005) | Cod sursa (job #1711896)
#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;
}