Cod sursa(job #2592977)

Utilizator Turturica_DorinTurturica Dorin Turturica_Dorin Data 2 aprilie 2020 17:51:18
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#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 );
}