Pagini recente » Cod sursa (job #2393115) | Cod sursa (job #1501262) | Cod sursa (job #529878) | Cod sursa (job #2050560) | Cod sursa (job #357461)
Cod sursa(job #357461)
#include <stdio.h>
#define N 1<<17
int n,v[N],val[N],r,best[N],ant[N],poz_f,rez_f;
int cbin(int x){
int i,j;
for (j=1; j<=r; j<<=1);
for (i=0; j; j>>=1)
if (i+<=r && v[val[i+j]]<x)
i+=;
return ++i;
}
void afisare(int poz){
if (ant[poz]>0)
afisare(ant[poz]);
printf("%d ",v[poz]);
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
int i,poz;
scanf("%d",&v[1]);
val[++r]=1;
best[1]=1;
for (i=2; i<=n; i++){
scanf("%d",&v[i]);
poz=r+1;
if (v[i]>v[val[r]])
val[++r]=i;
else{
poz=cbin(v[i]);
val[poz]=i;
}
best[i]=poz;
if (best[i]>rez_f){
rez_f=best[i];
poz_f=i;
}
ant[i]=val[poz-1];
}
printf("%d\n",r);
afisare(poz_f);
return 0;
}