Pagini recente » Cod sursa (job #583577) | Cod sursa (job #3274969) | Cod sursa (job #567913) | Cod sursa (job #1024046) | Cod sursa (job #2786880)
#include <bits/stdc++.h>
using namespace std;
const int NMAX=5001;
ifstream fin("secv.in");
ofstream fout("secv.out");
int N, v[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];
bool ok;
for(int i=1;i<=N;i++){
ok=false;
for(int j=1;j<i and ok==false;j++){
if(v[i]==v[j])
ok=true;
}
if(ok==false)
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;
}