Cod sursa(job #727176)

Utilizator R.A.RFMI Romila Remus Arthur R.A.R Data 27 martie 2012 19:44:18
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#define nmax 100004
using namespace std;

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

int T[nmax],P[nmax],V[nmax],L,N;

void Afiseaza(int p)
{
    if(T[p])
        Afiseaza(T[p]);
    out<<V[p]<<' ';
}

inline int Cauta(int val)
{
    int q,i;
    for(i=0;i<=L;i++)
        if(V[P[i]]<val)q=i;
    return q;
}

int main()
{
    int i,poz;
    in>>N;
    for(i=1;i<=N;i++)
        in>>V[i];
    //L = lungimea sibusirului crescator maximal
    //P[i] = pozitia ultimului element din subsirul crescator de lungime i
    P[L=1]=1;
    for(i=2;i<=N;i++)
    {
        poz = Cauta(V[i]);
        //out<<poz<<' ';
        if(poz==L)
            P[++L]=i;
        else if(V[P[poz+1]]<V[i])//il micsorez pe urmatorul
            P[poz+1]=i;
        T[i]=P[poz];
    }
    out<<L<<'\n';
    Afiseaza(P[L]);
    return 0;
}