Cod sursa(job #1550309)

Utilizator DysKodeTurturica Razvan DysKode Data 13 decembrie 2015 15:48:34
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int n,i,ls,ld,mij,s[100010],v[100010],p[100010],sol[100010],j,ans;

int main()
{
    fin>>n;
    fin>>v[ 1 ];
    ans = 1;
    p[ 1 ] = v[ 1 ];
    s[ 1 ] = 1;

    for( i = 2 ; i <= 100000 ; i++ )
        p[ i ] = 2000000001;

    for( i = 2 ; i <= n ; i++ )
    {
        fin>>v[ i ];
        for( j = 0 ; j <= ans ; j++ )
            if( p[ j ] < v[ i ] && v[ i ] < p[ j + 1 ] )
                break;
        p[ j + 1 ] = v[ i ];
        ans = max( ans , j + 1 );
        s[ i ] = j + 1;
    }
    fout<<ans-1<<'\n';

    p[ 0 ] = ans;
    for( i = n ; i >= 1 ; i-- )
    {
        if( s[ i ] == p[ 0 ] - 1 )
        {
            sol[ p[ 0 ]-- ] = v[ i ];
        }
    }

    for( i = 2 ; i <= ans ; i++ )
        fout<<sol[ i ]<<' ';

return 0;
}