Pagini recente » Cod sursa (job #749195) | Cod sursa (job #2836473) | Cod sursa (job #945649) | Cod sursa (job #175115) | Cod sursa (job #2373953)
#include <bits/stdc++.h>
using namespace std;
int v[100010],n,tata[100010],v1[100010],poz[100010],d[100010];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int ans=0,wh,l=0,l1=0;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&v[i]);
poz[++l]=1;
d[1]=1;
for(int i=2;i<=n;i++)
{
int st=0,dr=l;
while(st<=dr)
{
int mid=(st+dr)/2;
if(v[i]<=v[poz[mid]]) dr=mid-1;
else st=mid+1;
}
d[i]=d[poz[dr]]+1;
tata[i]=poz[dr];
if(d[i]>ans) {ans=d[i];wh=i;}
if(dr==l) poz[++l]=i;
else if(v[i]<v[poz[dr+1]]) poz[dr+1]=i;
}
printf("%d\n",ans);
for(;wh>0;wh=tata[wh]) v1[++l1]=wh;
for(int i=l1;i>=1;i--) printf("%d ",v[v1[i]]);
return 0;
}