Pagini recente » Cod sursa (job #1033037) | Cod sursa (job #1680225) | Cod sursa (job #2057431) | Cod sursa (job #1271661) | Cod sursa (job #2503679)
#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);
int minn = n + 1;
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] = n + 1;
}
else dp[i] = i - pozU + dp[pozU];
last[mp[v[i]]] = i;
if(mp[v[i]] == cnt)
minn = min(minn, dp[i]);
}
fout << (minn >= n + 1 ? - 1 : minn) << '\n';
return 0;
}