Cod sursa(job #2072757)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 22 noiembrie 2017 10:38:33
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#define nmax 100002
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[nmax],lg[nmax],pred[nmax],lm,n;

inline int cd_poz(int val)
{
    int pos,q;
    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 afisare(int x)
{
    if(pred[x])
    {
        afisare(pred[x]);
    }
    fout<<v[x]<<" ";
}

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