Cod sursa(job #213319)
#include <stdio.h>
#define DIM 100002
int V[DIM],X[DIM],P[DIM];
int n,p,u,m,i,dimX;
FILE *g = fopen("scmax.out","w");
void sol(int i){
if (i!=0) {
sol(P[i]);
fprintf(g,"%d ",V[i]);
}
}
int main(){
FILE *f = fopen("scmax.in","r");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
fscanf(f,"%d",&V[i]);
fclose(f);
X[1]=1;
dimX = 1;
for (i=2;i<=n;i++) {
//caut pe V[i] in x
p=1;
u=dimX;
while (p<=u) {
m = (p+u)/2;
if (V[X[m]]<V[i]) {
p=m+1;
} else {
u=m-1;
}
}
if (u==dimX) {
dimX++;
X[dimX] = i;
P[i] = X[dimX-1];
} else {
if (V[X[u+1]]>V[i]) {
X[u+1]=i;
P[i] = X[u];
}
}
}
fprintf(g,"%d\n",dimX);
sol(X[dimX]);
fclose(g);
return 0;
}