Pagini recente » Cod sursa (job #1785267) | Cod sursa (job #1788640) | Cod sursa (job #1948430) | Cod sursa (job #1695816) | Cod sursa (job #2780963)
#include <bits/stdc++.h>
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
#define cin f
#define cout g
//#define int long long
const int Max = 5e3 + 1;
void nos()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
}
int n;
int a[Max];
void read()
{
f>>n;
int i;
for(i=1;i<=n;i++)
f>>a[i];
}
int who[Max];
void update(int poz, int val)
{
who[poz] = max(who[poz],val);
}
std::vector< int > all;
int norma(int x)
{
auto it = lower_bound(all.begin(),all.end(),x);
return distance(all.begin(),it) + 1;
}
void solve()
{
int i;
for(i=1;i<=n;i++)
all.push_back(a[i]);
sort(all.begin(), all.end());
all.erase(unique(all.begin(), all.end()),all.end());
//dp[i] --> maximum starting point
for(i=1;i<=all.size();i++)
who[i] = -1;
int ans = INT_MAX;
for(i=1;i<=n;i++)
{
int poz = norma(a[i]);
if(poz == 1)
update(poz,i);
else
{
int prev_best = who[poz - 1];
update(poz,prev_best);
}
if(poz == all.size() and who[all.size()] != -1)
{
//daca e ultimul vad ce valoare avem aici
int this_best = i - who[all.size()] + 1;
ans = min(ans,this_best);
}
}
if(ans != INT_MAX)
cout<<ans;
else
cout<<-1;
}
void restart()
{
}
int32_t main()
{
nos();
read();
solve();
restart();
return 0;
}