Pagini recente » Cod sursa (job #255118) | Cod sursa (job #2416318) | Cod sursa (job #2509861) | Cod sursa (job #1434457) | Cod sursa (job #2976245)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
int n,m,nr=1,k=1;
const int N=1e5+5;
int v[N],A[N],last[N],best[N],p[N];
int _binar(int x)
{
int st=0;int dr=k;
while(st<=dr)
{
int mj=(st+dr)/2;
if(v[last[mj]]<x)
st=mj+1;
else
dr=mj-1;
}
return st-1;
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>v[i],A[i]=v[i];
sort(A+1,A+n+1);
for(int i=2;i<=n;i++)
if(A[i]!=A[i-1])
nr++;
best[1]=last[1]=1;
last[0]=0;
for(int i=2;i<=n;i++)
{
int poz=_binar(v[i]);
p[i]=last[poz];
best[i]=poz+1;
last[poz+1]=i;
if(k<poz+1) k++;
}
int mn=1e9;
for(int i=1;i<=n;i++)
if(best[i]==nr)
{
int x=i;
while(p[x])
x=p[x];
mn=min(mn,i-x+1);
}
if(mn==1e9)
g<<-1;
else
g<<mn;
return 0;
}