Pagini recente » Cod sursa (job #814130) | Cod sursa (job #1964508) | Cod sursa (job #2157266) | Cod sursa (job #968341) | Cod sursa (job #1752512)
#include<fstream>
#include<algorithm>
#define DIM 5005
using namespace std;
int n, nr, m, i, p, u, mid, sol;
int v[DIM], w[DIM], s[DIM], d[DIM];
ifstream fin("secv.in");
ofstream fout("secv.out");
int main(){
fin>> n;
for(i = 1; i <= n; i++){
fin>> v[i];
w[i] = v[i];
}
sort(w + 1, w + n + 1);
m = 1;
for(i = 2; i <= n; i++){
if(w[m] != w[i]){
w[++m] = w[i];
}
}
s[1] = v[1];
d[1] = 1;
nr = 1;
sol = n + 1;
for(i = 2; i <= n; i++){
if(v[i] > s[nr]){
nr++;
s[nr] = v[i];
d[nr] = d[nr - 1];
if(nr == m){
sol = min(sol, i - d[nr] + 1);
}
}
else{
p = 1;
u = nr;
while(p <= u){
mid = (p + u) / 2;
if(s[mid] >= v[i]){
u = mid - 1;
}
else{
p = mid + 1;
}
}
s[p] = v[i];
if(p == 1){
d[1] = i;
}
else{
d[p] = d[p - 1];
}
if(p == m){
sol = min(sol, i - d[p] + 1);
}
}
}
if(n == 1){
fout<<"1\n";
return 0;
}
if(sol == n + 1){
fout<<"-1\n";
return 0;
}
fout<< sol <<"\n";
return 0;
}