Cod sursa(job #3189208)

Utilizator Zed1YasuoAlex Birsan Zed1Yasuo Data 4 ianuarie 2024 17:34:54
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,m,k=1;
const int N=1e5+5;
int v[N],last[N],best[N],p[N];
int _binar(int x)
{
    int st=0;int dr=k;
    while(st<=dr)
    {
        int mj=(st+dr)/2;
        if(v[last[mj]]<x)
            st=mj+1;
        else
            dr=mj-1;
    }
    return st-1;
}
void afis(int x)
{
    if(x==0)
        return;
    afis(p[x]);
    g<<v[x]<<" ";
}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];
    best[1]=last[1]=1;
    last[0]=0;
    for(int i=2;i<=n;i++)
    {
        int poz=_binar(v[i]);
        p[i]=last[poz];
        best[i]=poz+1;
        last[poz+1]=i;
        if(k<poz+1)    k++;
    }
    int mx=0,poz;
    for(int i=1;i<=n;i++)
        if(mx<best[i])
            mx=best[i],poz=i;
    g<<mx<<'\n';
    afis(poz);
    return 0;
}