Pagini recente » Cod sursa (job #670859) | Cod sursa (job #2759369) | Cod sursa (job #2155833) | Cod sursa (job #557715) | Cod sursa (job #2118383)
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define N 5010
using namespace std;
ifstream in("secv.in");
ofstream out("secv.out");
struct lol{
int val, idx;
};
int n, vf, mn = N;
lol a[N];
vector <int> v[N];
bool cmp(lol a, lol b){
if(a.val == b.val)
return a.idx < b.idx;
return a.val < b.val;
}
int solve(int idx, int lvl, int dist){
if(lvl == 1)
return dist;
lvl--;
auto it = lower_bound(v[lvl].begin(), v[lvl].end(), idx) - v[lvl].begin();
it--;
if(it < 0)
return N;
return solve(v[lvl][it], lvl, dist + idx - v[lvl][it]);
}
int main(){
in >> n;
for(int i = 1; i <= n; i++){
in >> a[i].val;
a[i].idx = i;
}
sort(a + 1, a + n + 1, cmp);
int l, r;
l = r = 1;
while(r <= n){
++vf;
while(r <= n && a[r].val == a[l].val)
r++;
for(int i = l; i < r; i++)
v[vf].push_back(a[i].idx);
l = r;
}
for(auto it : v[vf])
mn = min(mn, solve(it, vf, 1));
out << (mn == N ? -1 : mn);
return 0;
}