Cod sursa(job #1922661)

Utilizator Victor24Vasiesiu Victor Victor24 Data 10 martie 2017 18:19:30
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <stack>

using namespace std;

string pat, txt;

int n, a[100005], dp[100005], i, st, dr, mij, drum[100005], el, nr, poz;

stack <int> stiv;

ifstream f ("scmax.in");
ofstream g ("scmax.out");

int main ()
{
    f>>n;

    for ( i = 1 ; i <= n ; i++ )
    {
        f>>a[i];
    }

    dp[1]=1;
    nr=1;

    for ( i = 2 ; i <= n ; i++ )
    {
        el = a[i];

        st=1;
        dr=nr;
        poz=1;
        while ( st <= dr )
        {
            mij = (st+dr) / 2;

            if ( a [ dp[ mij ] ] < el )
            {
                st = mij + 1;
                poz =  st;
            }
            else
            {
                dr = mij - 1;
            }

        }

        dp [ poz ] = i ;
        drum[ i ] = dp [ poz - 1 ] ;
        nr = max ( nr, poz );

    }

    g << nr << '\n';

    stiv.push( a [ dp [ nr ] ] );

    for ( i = drum [ dp [ nr ] ] ; i != 0 ; i = drum [ i ])
    {
        stiv.push ( a [ i ] );
    }

    while ( !stiv.empty() )
    {
        g<<stiv.top()<<" ";
        stiv.pop();
    }

    return 0;
}