Cod sursa(job #2174740)

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

using namespace std;

int n, val[100005], scmax[100005], poz[100005], ls, ld, mij, rsp, ma, x;

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

stack < int > st;

int main ()
{

    f>>n;

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

    scmax[1] = val[1];
    poz[1] = 1;

    ma = 1;

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

        ls = 1;
        ld = ma;

        rsp = 0;

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

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

        }

        if ( rsp  == ma )
        {
            ma++;
        }

        scmax[rsp+1] = x;

        poz[i] = rsp + 1;

    }

    g<<ma<<'\n';

    for ( int i = n ; i >= 1; i-- )
    {
        if ( poz[i] == ma )
        {
            ma--;
            st.push(val[i]);
        }
    }

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

    return 0;
}