Pagini recente » Cod sursa (job #1285494) | Cod sursa (job #1102224) | Cod sursa (job #179748) | Cod sursa (job #1027883) | Cod sursa (job #489170)
Cod sursa(job #489170)
#include<stdio.h>
#define dim 100100
FILE*f=fopen("scmax.in","r");
FILE*g=fopen("scmax.out","w");
int N,W[dim],i,poz,M[dim],m,p,u,T[dim],sol[dim],k;
int main () {
fscanf(f,"%d",&N);
for ( i = 1 ; i <= N ; ++i )
fscanf(f,"%d",&W[i]);
M[ 1 ] = M[ 0 ] = 1;
for ( i = 2 ; i <= N ; ++i ){
p = 1 ; u = M[ 0 ] ;
while ( p <= u ){
m = p + (u - p) / 2;
if ( W[i] > W[ M[ m ] ] )
p = m + 1 ;
else
u = m - 1 ;
}
poz = p;
M[poz] = i;
if ( poz > M[0] )
M[0] = poz;
T[i] = M[u];
}
fprintf(g,"%d\n",M[0]);
u = M[M[0]];
for ( i = 1 ; i <= M[0] ; ++i ){
sol[ ++k ] = W[ u ] ;
u = T[u];
}
for ( i = M[0] ; i >= 1 ; --i )
fprintf(g,"%d ",sol[i]);
fclose(f);
fclose(g);
return 0;
}