Pagini recente » Cod sursa (job #2216827) | Cod sursa (job #748038) | Cod sursa (job #2498281) | Cod sursa (job #1180661) | Cod sursa (job #177122)
Cod sursa(job #177122)
#include <stdio.h>
#include <stdlib.h>
#define N 100010
int n,nr;
int v[N],pred[N];
int x[N];
void scan(){
int i;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&v[i]);
}
int b_search(int p,int u,int key){
int m;
while (p<u){
m=(p+u)/2;
if (v[x[m]]==key)
return m;
if (v[x[m]]<key)
p=m+1;
else
u=m;
}
if(v[x[p]]<key)
++p;
return p;
}
void subsir(int y){
if (pred[y]>0)
subsir(pred[y]);
printf("%d ",v[y]);
}
void printx(){
int i;
for (i=1;i<=nr;++i)
printf("%d ",x[i]);
printf("\n");
}
void solve(){
int i,poz;
pred[0]=-1;
x[++nr]=1;pred[1]=-1;
//printf("%d ",n);
for (i=2;i<=n;++i){
poz=b_search(1,nr,v[i]);
if (poz==nr+1)
++nr;
x[poz]=i;
pred[i]=x[poz-1];
//printx();
}
}
void print(){
printf("%d\n",nr);
subsir(x[nr]);
fclose(stdin);
fclose(stdout);
exit(0);
}
int main(void){
scan();
solve();
print();
}