Pagini recente » Cod sursa (job #786296) | Cod sursa (job #568810) | Cod sursa (job #2871410) | Cod sursa (job #2554270) | Cod sursa (job #629103)
Cod sursa(job #629103)
#include<cstdio>
#define NMAX 100003
using namespace std;
int a[NMAX],l[NMAX],poz[NMAX],b[NMAX];
int n,u,p,m,i,max;
using namespace std;
void cit()
{freopen("scmax.in","rt",stdin);
freopen("scmax.out","wt",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d", &a[i]);
}
//void afis(int f)
//{if(f)
// {afis(l[f]);
// printf("%d ",a[f]);
// }
//}
int main()
{cit();
poz[1]=1;
max=1;
for(i=2;i<=n;i++)
{p=1;
u=max;
while(p<=u)
{m=(u-p)/2+p;
if(a[i]>a[poz[m]]) p=m+1;
else u=m-1;
}
if(p>max) max++;
poz[p]=i;
l[i]=poz[p-1];
}
printf("%d\n",max);
// afis(poz[max]);
int f=poz[max],j=1;
while(f) {b[j++]=a[f]; f=l[f];}
for(int i=max;i>=1;i--) printf("%d ",b[i]);
printf("\n");
return 0;
}