Pagini recente » Cod sursa (job #1953813) | Cod sursa (job #1163828) | Cod sursa (job #1634604) | Cod sursa (job #2889309) | Cod sursa (job #2976240)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
int n,m,nr,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;
}
void afis(int x)
{
if(x==0)
return;
afis(p[x]);
g<<v[x]<<" ";
}
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=1;i<=n;i++)
{
while(A[i]==A[i+1])
i++;
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);
}
g<<mn;
return 0;
}