Pagini recente » Cod sursa (job #2391859) | Cod sursa (job #2502244) | Cod sursa (job #2905550) | Cod sursa (job #1885625) | Cod sursa (job #2503675)
#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(mp[v[i]] == cnt)
minn = min(minn, dp[i]);
}
fout << (minn >= (1 << 30) ? - 1 : minn) << '\n';
return 0;
}