Pagini recente » Cod sursa (job #341150) | Cod sursa (job #59839) | Cod sursa (job #2569811) | Cod sursa (job #2447357) | Cod sursa (job #1413983)
#include <cstdio>
#define nmax 100005
using namespace std;
int n,a[nmax],t[nmax],l[nmax],v[nmax],nrv,mxm=-1,pozmxm;
void citire()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
}
int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
int caut_bin(int x)
{
int li=1,lf=nrv,m;
while(li<=lf)
{
m=(li+lf)/2;
if(a[v[m]]==x)
return m;
if(a[v[m]]>x)
{
lf=m-1;
continue;
}
li=m+1;
}
return li;
}
void rezolv()
{
int poz;
for(int i=1;i<=n;i++)
{
poz=caut_bin(a[i]);
l[i]=poz;
t[i]=v[poz-1];
v[poz]=i;
nrv=maxim(poz,nrv);
if(l[i]>mxm)
{
mxm=l[i];
pozmxm=i;
}
}
}
void afisare(int k)
{
if(k!=0)
{
afisare(t[k]);
printf("%d ",a[k]);
}
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
citire();
rezolv();
printf("%d\n",mxm);
afisare(pozmxm);
return 0;
}