Cod sursa(job #1528984)

Utilizator horiainfoTurcuman Horia horiainfo Data 20 noiembrie 2015 13:08:22
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>

#define NR 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int bst[NR],L[NR],ant[NR],nr,a[NR],n,poz;
void afis(int x)
{
    if(x==0)
        return;
    afis(ant[x]);
    fout<<a[x]<<' ';
}

int caut(int x)
{
    int st=0,dr=nr,mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(a[L[mij]]<x && a[L[mij+1]]>=x)   return  mij;
        if(a[L[mij]]<x) st=mij+1;
        else
            dr=mij-1;
    }
    return nr;
}
int main()
{
    fin>>n>>a[1];
    bst[1]=1; L[1]=1; nr=1;
    for(int i=2;i<=n;i++)
    {
        fin>>a[i];
        poz = caut(a[i]);
        bst[i]=poz+1;
        ant[i]=L[poz];
        L[poz+1]=i;
        if(poz+1>nr)    nr=poz+1;
    }
    fout<<nr<<'\n';
    afis(L[nr]);
    return 0;
}