Pagini recente » Cod sursa (job #1890107) | Cod sursa (job #2750558) | Cod sursa (job #929382) | Cod sursa (job #2722639) | Cod sursa (job #2503672)
#include <fstream>
#include <set>
#include <map>
#define NMAX 5005
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
int dp[NMAX], v[NMAX], last[NMAX];
set<int> norm;
map<int, int> mp;
int main()
{
int n;
fin >> n;
for(int i = 1; i <= n; ++i){
fin >> v[i];
norm.insert(v[i]);
}
int cnt = 0;
for(auto it: norm)
mp[it] = ++cnt;
mp[0] = 0;
int minn = (1 << 30);
for(int i = 1; i <= n; ++i){
int pozU = last[mp[v[i] - 1]];
if(pozU == 0){
if(mp[v[i]] == 1)
dp[i] = 1;
else dp[i] = (1 << 30);
}
else dp[i] = i - pozU + dp[pozU];
last[mp[v[i]]] = i;
if(v[i] == cnt)
minn = min(minn, dp[i]);
}
fout << (minn == (1 << 30) ? - 1 : minn) << '\n';
return 0;
}