Pagini recente » Cod sursa (job #1642566) | Cod sursa (job #1849706) | Cod sursa (job #1712296) | Cod sursa (job #1437024) | Cod sursa (job #2703289)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("secv.in");
ofstream fout ("secv.out");
int v[5001], o[5001], w[5001], poz[5001], ind[5001], ant[5001];
int main()
{
int n, i, j, k=0, ct=0, p, u, mij, rez;
fin>>n;
for(i=1; i<=n; i++){
fin>>v[i];
o[i] = v[i];
}
sort(o+1, o+n+1);
for(i=1; i<=n; i++){
if(o[i] != o[i - 1]){
k++;
w[k] = o[i];
}
}
/*for(i=1; i<=k; i++){
cout<<w[i]<<' ';
}cout<<"\n";
for(i=1; i<=n; i++){
cout<<v[i]<<' ';
}cout<<"\n";*/
ct=0;
for(i=1; i<=n; i++){
if(v[i] == w[ct + 1]){
//cout<<"AICI\n";
ct++;
poz[i] = ct;
ind[ct] = i;
ant[i] = ind[ct - 1];
}
else if(v[i] > w[ct + 1]){
poz[i] = -1; //nu am ce face cu el
}
else{
p=1;
u=ct;
while(p <= u){
mij = (p + u) / 2;
if(w[mij] < v[i]){
p = mij + 1;
}
else {
u = mij - 1;
}
}
poz[i] = p;
ant[i] = ind[p - 1];
ind[p] = i;
}
//cout<<"i= "<<i<<"\npoz["<<i<<"]= "<<poz[i]<<"\nct= "<<ct<<"\n\n";
}
rez = 5002;
for(i=1; i<=n; i++){
if(poz[i] == k){
j=i;
//cout<<"j= "<<j<<"\n";
while( poz[j] > 1){
j = ant[j];
//cout<<"j= "<<j<<"\n";
}
rez = min(rez, i - j + 1);
}
}
fout<<rez;
}