Pagini recente » Cod sursa (job #1276416) | Cod sursa (job #3292394) | Cod sursa (job #174594) | Cod sursa (job #2147293) | Cod sursa (job #1289671)
#include <fstream>
#include <set>
#include <map>
#define MAXN 5005
#define INF 2000000000
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
int n, v[MAXN], start_poz[MAXN], largest_nr, sol = INF, x;
set<int> v_cresc;
set<int>::iterator it1, it2;
map<int, int> last, prev_nr;
int main()
{
int i;
f >> n;
for(i = 1; i <= n; i++){
f >> v[i];
v_cresc.insert(v[i]);
last[v[i]] = 0;
}
it1 = it2 = v_cresc.begin(); it2++;
prev_nr[*it1] = -1;
for(; it2 != v_cresc.end(); it1++, it2++)
prev_nr[*it2] = *it1;
largest_nr = *it1;
for(i = 1; i <= n; i++){
x = v[i];
last[x] = i;
if(prev_nr[x] == -1){
start_poz[i] = i;
continue;
}
x = prev_nr[x];
if(last[x])
start_poz[i] = start_poz[last[x]];
if(v[i] == largest_nr && start_poz[i] && i - start_poz[i] + 1 < sol)
sol = i - start_poz[i] + 1;
}
if(sol == INF){
g << "-1\n";
return 0;
}
g << sol << '\n';
f.close();
g.close();
return 0;
}