Cod sursa(job #2161336)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 11 martie 2018 17:00:07
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
#define nmax 100002
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");

int lg[nmax],v[nmax],pred[nmax],lm;

int poz(int val)
{
    int q,pos;
    for(q=1;q<=lm;q<<=1);
    for(pos=0;q;q>>=1)
        if(pos+q<=lm&&v[lg[pos+q]]<val)
            pos+=q;
    return pos;
}

void afis(int x)
{
    if(pred[x])
    {
        afis(pred[x]);
    }
    fout<<v[x]<<" ";
}

int main()
{
    int n;
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    lg[1]=1;
    v[0]=20000002;
    for(int i=1;i<=n;i++)
    {
        int po=poz(v[i]);
        lm=max(lm,po+1);
        lg[po+1]=i;
        pred[i]=lg[po];
    }
    fout<<lm<<"\n";
    afis(lg[lm]);
    return 0;
}