Pagini recente » Cod sursa (job #1744132) | Cod sursa (job #1032817) | Cod sursa (job #753298) | Cod sursa (job #115108) | Cod sursa (job #1281596)
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int a[100001],n;
int m[100002],l,p[100002],s[100002],lo,hi,newl;
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n; i++)
scanf("%d",&a[i]);
l=0;
for(int i=1; i<=n; i++)
{
lo=1;
hi=l;
while(lo<=hi){ int mid=(lo+hi)/2; if(a[m[mid]]<a[i])lo=mid+1; else hi=mid-1; }
newl=lo;
p[i]=m[newl-1];
m[newl]=i;
if(newl>l)l=newl;
}
int k=m[l];
for(int i=l; i>=1; i--)
{
s[i]=a[k];
k=p[k];
}
printf("%d\n",l);
for(int i=1; i<=l; i++)printf("%d ",s[i]);
return 0;
}