Cod sursa(job #2173602)

Utilizator Victor24Vasiesiu Victor Victor24 Data 15 martie 2018 23:02:39
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;

int n,v[100005], dp[100005],pa[100005], i, x, ls, ld, mij, ma, rsp, oo=99999999;

stack < int > st;

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

int main ()
{
    f>>n;

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

    dp[1] = v[1];
    pa[1] = 1;

    ma = 1;

    for ( i = 2 ; i <= n ; i++ )
    {
        x = v[i];

        ls = 1;
        ld = ma;

        rsp = 0;

        while ( ls <= ld )
        {
            mij = (ls + ld) / 2;

            if ( dp[mij] < x )
            {
                rsp = mij;
                ls = mij + 1;
            }
            else
            {
                ld = mij - 1;
            }

        }

        if ( rsp == ma )
        {
            ma++;
            dp[ma] = x;
        }

        dp[rsp+1] = x;

        pa[i] = rsp+1;

    }

    for ( i = n ; i >= 1 ; i-- )
    {
        if ( pa[i] == ma )
        {
            st.push( v[i] );
            ma--;

        }
        if ( ma == 0 )
        {
            break;
        }
    }

    g<<st.size()<<'\n';

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

}