Pagini recente » Cod sursa (job #965430) | Cod sursa (job #1310192) | Cod sursa (job #730313) | Cod sursa (job #897070) | Cod sursa (job #1334978)
#include <fstream>
#include <cstring>
#include <algorithm>
#define DIM 5005
using namespace std;
ifstream fin ("secv.in" );
ofstream fout("secv.out");
int n, m, i, j, nr, a, b, mid;
int v[DIM], w[DIM], t[DIM];
int maxim, minim;
void Read(){
fin >> n;
for(i = 1; i <= n; i ++)
fin >> v[i];
return;
}
void Rebuild(){
minim = DIM; maxim = -DIM;
for(i = 1; i <= n; i ++)
w[i] = v[i];
sort(w + 1, w + n + 1);
w[0] = -1;
for(i = 1; i <= n; i ++){
if(w[i] == w[i-1])
t[i] = nr;
else
t[i] = ++nr;
}
for(i = 1; i <= n; i ++){
a = 1; b = n;
while(a <= b){
mid = (a+b)/2;
if(w[mid] == v[i])
break;
if(w[mid] < v[i])
a = mid + 1;
else
b = mid - 1;
}
v[i] = t[mid];
}
for(i = 1; i <= n; i ++)
if(v[i] > maxim)
maxim = v[i];
memset(w, 0, sizeof(w));
memset(t, 0, sizeof(t));
return;
}
void Code(){
for(i = 1; i <= n; i ++){
if(v[i] == 1)
w[1] = i;
else
if(w[v[i]-1] != 0)
w[v[i]] = w[v[i]-1];
if(v[i] == maxim)
if(i - w[v[i]] + 1 < minim)
minim = i - w[v[i]] + 1;
}
if(minim == -DIM)
fout << -1;
else
fout << minim;
return;
}
int main(){
Read();
Rebuild();
Code();
return 0;
}