Pagini recente » Cod sursa (job #1338534) | Cod sursa (job #598438) | Cod sursa (job #2957981) | Cod sursa (job #1610241) | Cod sursa (job #3197575)
#include <stdio.h>
using namespace std;
#define MAXN 100000
int array[ MAXN ], solution[ MAXN ], v[ MAXN ];
int max_length = 0, n;
int bsearch( int value )
{
int left, right, mid;
left = -1;
right = max_length;
while( right - left > 1 )
{
mid = ( left + right ) / 2;
if( solution[ mid ] < value )
{
left = mid;
}
else
{
right = mid;
}
}
return right;
}
int main()
{
FILE *fin, *fout;
int i, element, maxx, last;
fin = fopen( "scmax.in", "r" );
fscanf( fin, "%d", &n );
for( i = 0; i < n; i++ )
{
fscanf( fin, "%d", &array[ i ] );
int a = bsearch( array[ i ] );
v[ i ] = a;
if( a == max_length )
{
last = i;
max_length++;
}
solution[ a ] = array[ i ];
}
fclose( fin );
fout = fopen( "scmax.out", "w" );
fprintf( fout, "%d\n", max_length );
solution[ max_length - 1 ] = array[ last ];
maxx = array[ last ];
int a = max_length - 2;
last--;
while( last >= 0 )
{
if( v[ last ] == a && array[ last ] < maxx )
{
solution[ a ] = array[ last ];
maxx = array[ last ];
a--;
}
last--;
}
for( i = 0; i < max_length; i++ )
{
fprintf( fout, "%d ", solution[ i ] );
}
fclose( fout );
return 0;
}