Cod sursa(job #2149160)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 2 martie 2018 12:48:05
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 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=0,n;

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

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

int main()
{
    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=pozs(v[i]);
        lm=max(lm,po+1);
        lg[po+1]=i;
        pred[i]=lg[po];
    }
    fout<<lm<<"\n";
    afis(lg[lm]);
    return 0;
}