Cod sursa(job #1997948)

Utilizator Victor24Vasiesiu Victor Victor24 Data 5 iulie 2017 22:49:54
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;

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

int a[100005], c[100005], v[100005], i, j, n, nr, ls, ld, mij, rsp, x;

stack <int> st;

int main()
{
    f>>n;

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

    a[1]=v[1];

    nr=1;

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

        ls=1;
        ld=nr;

        rsp = 0;

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

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

        }

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

        a[rsp+1] = x;

        c[i] = rsp+1;

    }

    for ( i = n; i >= 1 ; i-- )
    {
        if ( c[i] == nr )
        {
            st.push(v[i]);
            nr--;
        }

    }

    g<<st.size();

    g<<'\n';

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

}