Pagini recente » Cod sursa (job #2649794) | Cod sursa (job #3172216) | Cod sursa (job #1223839) | Cod sursa (job #2733730) | Cod sursa (job #1487446)
#include<cstdio>
int n,i,j,p,u,mid,a,nr,v[100100],x[100100],t[100100],sol[100100];
FILE *f,*g;
int main(){
f=fopen("scmax.in","r");
g=fopen("scmax.out","w");
fscanf(f,"%d",&n);
for(i=1;i<=n;i++){
fscanf(f,"%d",&v[i]);
}
x[0]=-1;
x[1]=1;
t[1]=-1;
nr=1;
for(i=2;i<=n;i++){
p=1;
u=nr;
while(p<=u){
mid=(p+u)/2;
if( v[i] > v[ x[ mid ] ] )
p=mid+1;
else
u=mid-1;
}
if(p>nr)
nr=p;
x[p]=i;
t[ x[ p ] ] = x[p-1];
}
fprintf(g,"%d\n",nr);
a=x[nr];
nr=0;
while(t[a]!=-1){
sol[++nr]=v[a];
a=t[a];
}
sol[++nr]=v[a];
for(i=nr;i>=1;i--){
fprintf(g,"%d ",sol[i]);
}
fclose(f);
fclose(g);
return 0;
}