Pagini recente » Cod sursa (job #3207194) | Cod sursa (job #608259) | Cod sursa (job #59922) | Cod sursa (job #2353016) | Cod sursa (job #629105)
Cod sursa(job #629105)
#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]);
}
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);
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;
}