Pagini recente » Cod sursa (job #2606971) | Cod sursa (job #853482) | Cod sursa (job #512893) | Cod sursa (job #3151147) | Cod sursa (job #2416389)
#include <bits/stdc++.h>
using namespace std;
int v[100010],poz[100010],d[100010],tat[100010],rez[100010];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,l=0,ans=0,last,c=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&v[i]);
int st=1,dr=l;
while(st<=dr)
{
int mid=(st+dr)/2;
if(v[i]>v[poz[mid]]) st=mid+1;
else dr=mid-1;
}
d[i]=d[poz[dr]]+1;
tat[i]=poz[dr];
if(d[i]>ans) {ans=d[i];last=i;}
if(dr==l) poz[++l]=i;
else poz[dr+1]=i;
}
printf("%d\n",ans);
rez[++c]=v[last];
while(tat[last]!=0)
{
last=tat[last];
rez[++c]=v[last];
}
for(int i=c;i>=1;i--) printf("%d ",rez[i]);
return 0;
}