Pagini recente » Cod sursa (job #3260873) | Cod sursa (job #1583810) | Cod sursa (job #3294257) | Cod sursa (job #2721155) | Cod sursa (job #2152499)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <map>
using namespace std;
ifstream in ("secv.in");
ofstream out ("secv.out");
int const nmax = 5000;
int dp[5 + nmax];
int v[5 + nmax];
int v2[5 + nmax];
map<int , int> realpos;
int main() {
int n;
in>>n;
int smin = 5 + nmax , smax = 0;
for(int i = 1 ; i <= n ;i++){
in>>v[i];
v2[i] = v[i];
dp[i] = -1;
if(smax < v[i])
smax = v[i];
}
v2[0] = -1;
realpos[-1] = 0;
sort(v2 + 1 ,v2 + n + 1);
for(int i = 1 ; i <= n ;i++){
if(v2[i - 1] != v2[i]){
realpos[v2[i]] = realpos[v2[i - 1]] + 1;
}
}
for(int i = 1 ; i <= n ;i++){
int pos = realpos[v[i]];
if(pos == 1)
dp[pos] = i;
else{
if(0 < dp[pos - 1])
dp[pos] = dp[pos - 1];
else
dp[pos] = -1;
}
if(0 < dp[pos] && (i - dp[pos] + 1) < smin && v[i] == smax){
smin = (i - dp[pos] + 1);
}
}
if(smin == 5 + nmax)
out<<-1;
else
out<<smin;
return 0;
}