Pagini recente » Cod sursa (job #748580) | Cod sursa (job #1751318) | Cod sursa (job #1332302) | Cod sursa (job #955714) | Cod sursa (job #1639425)
#include <bits/stdc++.h>
using namespace std;
int n,v[100005],L[100005],best[100005],scm,rec[100005],pozmax,len=1;
int caut_binar(int x)
{
int st=1,dr=len,mij=(st+dr)/2;
while(st<=dr)
{
if (v[L[mij]]<x && v[L[mij+1]]>=x)
return mij+1;
if (v[L[mij]]<x)
st=mij+1;
else
dr=mij-1;
mij=(st+dr)/2;
}
return dr+1;
}
void recurs(int poz)
{
if (!poz)
return;
recurs(rec[poz]);
printf("%d ",v[poz]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;++i)
scanf("%d",&v[i]);
L[len]=1;
best[1]=1;
for (int i=2;i<=n;++i)
{
int poz=caut_binar(v[i]);
L[poz]=i;
best[i]=best[L[poz-1]]+1;
rec[i]=L[poz-1];
if (poz>len)
++len;
if (best[i]>scm)
{
scm=best[i];
pozmax=i;
}
}
printf("%d\n",scm);
recurs(pozmax);
return 0;
}