Cod sursa(job #2212342)

Utilizator AlexandruPaulSirbu Alex AlexandruPaul Data 13 iunie 2018 20:48:19
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
using namespace std;
const int Maxx=1e5+1;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int best[Maxx];
int bun[Maxx];
int L[Maxx];
int A[Maxx];
int n,poz,i,lgmx;
int ans;
void afis(int x)
{
    if (bun[x]>0) afis(bun[x]);
    fout<<A[x]<<" ";
}
int caut(int x)
{
    int lo=0;
    int hi=lgmx;
    int ret,mid;
    while (lo <= hi)
    {
        mid=(lo+hi)/2;
        if (A[L[mid]]<x)
        {
            lo=mid+1;
            ret=mid;
        } else hi=mid-1;
    }
    return ret;
}
int main()
{
    fin>>n;
    for (i=1;i<=n;i++) fin>>A[i];
    best[1]=L[1]=1;
    lgmx=1;
    for (i=2;i<=n;i++)
    {
        poz=caut(A[i]);
        bun[i]=L[poz];
        best[i]=poz+1;
        L[poz+1]=i;
        lgmx=max(lgmx,poz+1);
    }
    for (i=1;i<=n;i++)
        if (ans<best[i])
    {
        ans=best[i];
        poz=i;
    }
    fout<<ans<<"\n";
    afis(poz);
    return 0;
}