Pagini recente » Cod sursa (job #841253) | Cod sursa (job #2054367) | Cod sursa (job #1613768) | Cod sursa (job #2220899) | Cod sursa (job #1379232)
#include <cstdio>
#include <algorithm>
using namespace std;
int v[100005],s[100005],p[100005],lmax,ls,n,pozmax;
int cb(int x)
{
int L=0,R=ls,M;
while (L<=R)
{
M=(L+R)>>1;
if (x>v[s[M]] && x<=v[s[M+1]]) return M;
else if (x<v[s[M]]) R=M-1;
else L=M+1;
}
return ls;
}
void afis(int x)
{
if (p[x]) afis(p[x]);
printf("%d ",v[x]);
}
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]);
s[1]=ls=lmax=pozmax=1;
for (int i=2;i<=n;i++)
{
int poz=cb(v[i]);
s[poz+1]=i;
p[i]=s[poz];
ls=poz+1;
if (ls>lmax)
{
lmax=ls;
pozmax=i;
}
}
printf("%d\n",lmax);
afis(pozmax);
return 0;
}