Pagini recente » Cod sursa (job #2858353) | Cod sursa (job #1854952) | Cod sursa (job #1561854) | Cod sursa (job #1208807) | Cod sursa (job #2650069)
#include <bits/stdc++.h>
using namespace std;
ifstream in("secv.in");
ofstream out("secv.out");
unordered_map<int, int> hm;
vector<int> elems;
int v[5005];
int last[5005];
int ptr[5005];
int sum[5005];
int main()
{
int n; in >> n;
for(int i = 0; i < n; i++)
in >> v[i];
for(int i = 0; i < n; i++)
{
if(hm[v[i]] == 0)
{
hm[v[i]] = 1;
elems.push_back(v[i]);
}
}
sort(elems.begin(), elems.end());
for(int i = 0; i < n; i++)
{
hm[elems[i]] = i;
}
for(int i = 0; i < n; i++)
{
v[i] = hm[v[i]];
//cout << v[i] << " " ;
}
//cout << endl;
for(int i = 0; i < 5005; i++) last[i] = -1;
//cout << last[0] << endl << endl;
for(int i = 0; i < n; i++)
{
int elem = v[i];
//cout << elem << " ";
if(elem == 0) ptr[i] = i;
else ptr[i] = last[elem-1];
last[elem] = i;
//cout << ptr[i] << endl;
}
int minim = 1000000;
for(int i = 0; i < n; i++)
{
if(ptr[i] != -1)
sum[i] = sum[ptr[i]] + (i - ptr[i]);
else
sum[i] = 1000000;
if(v[i] == elems.size()-1)
minim = min(minim, sum[i]);
}
if(minim == 1000000) out << "-1";
else out << minim+1;
}