Cod sursa(job #2271101)

Utilizator Petru00Octavian Petrut Petru00 Data 28 octombrie 2018 00:56:55
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,v[100003],best[100003],p[100003],L[100003],maxim,k,nr;

void afis(int i)
{
    if(p[i]>0) afis(p[i]);
    fout<<v[i]<<" ";
}

int caut(int x,int p,int u)
{
    if(p<=u)
    {
        int m=(p+u)/2;
        if (v[L[m]] < x &&  v[L[m+1]] >= x) return m;
        else if (v[L[m+1]] < x)caut(x,m+1,u);
        else caut(x,p,m-1);
    }
    return nr;
}

int main()

{
    int i,poz;
    nr=1;
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>v[i];
    best[1]=L[1]=1;
    L[0]= 0;
    for(i=2; i <= n; i++)
    {
        poz=caut(v[i],0,nr);
        p[i]=L[poz];
        best[i]=poz+1;
        L[poz+1]=i;
        if(nr < poz+1)nr=poz+1;
    }
    maxim=0;
    poz=0;
    for(i=1; i <= n; i++)

        if(maxim < best[i])
        {
            maxim=best[i];
            poz=i;
        }
    fout<<maxim<<"\n";
    afis(poz);
    return 0;

}