Pagini recente » Cod sursa (job #2381997) | Cod sursa (job #510419) | Monitorul de evaluare | Cod sursa (job #385455) | Cod sursa (job #2592977)
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
#define nmax 100005
int n, logn, ns, v[ nmax ], poz[ nmax ], sub[ nmax ], i, p, lg;
int caut_bin( int x )
{
int i;
for ( i = 0, lg = logn; lg; lg = lg >> 1 )
if ( i + lg <= ns && sub[ i + lg ] <= x )
i += lg;
if ( sub[ i ] == x )
return i;
return i + 1;
}
void afis( int p )
{
int i;
for ( i = p; i >= 1 && ns > 0; i-- )
{
if ( poz[ i ] == ns )
{
ns--;
afis( i - 1 );
fout<< v[ i ] << ' ';
}
}
}
int main ()
{
fin >> n >> v[ 1 ];
ns = 1; logn = 1; poz[ 1 ] = 1; sub[ 1 ] = v[ 1 ];
for( i = 2; i <= n; i++ )
{
fin >> v[ i ];
p = caut_bin( v[ i ] );
if ( p > ns )
{
ns++;
if ( ns > logn )
logn = logn << 1;
}
poz[ i ] = p;
sub[ p ] = v[ i ];
}
fout<< ns << '\n';
afis( n );
}