Cod sursa(job #845191)

Utilizator danalex97Dan H Alexandru danalex97 Data 30 decembrie 2012 16:04:44
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
using namespace std;

const int Nmax = 100010;

ifstream F("scmax.in");
ofstream G("scmax.out");

int N,k,L[Nmax],S[Nmax],V[Nmax],Sol=0;

int GetPos(int X)
{
    int P=0, U=Sol, M, R=1;

    while (P<=U)
    {
        M=(P+U)/2;

        if (X>S[M])
            P=M+1, R=M;
        else
            U=M-1;
    }

    return R+1;
}

int main ()
{
    F>>N;
    for (int i=1,a;i<=N;++i)
    {
        F>>a;
        int j=GetPos(a);

        L[i]=j;
        S[j]=a;

        if ( j>Sol )  Sol=j, k=i;

        V[i]=a;
    }

    G<<Sol<<'\n';

    while ( k>0 )
    {
        S[++S[0]]=V[k];
        for (int i=k;i>=0;--i)
            if (L[i]+1==L[k])
            {
                k=i;
                break;
            }
    }

    for (int i=S[0];i>0;--i)
        G<<S[i]<<' ';
    G<<'\n';
}