Cod sursa(job #3256379)

Utilizator ImphinityComan Razvan Ioan Imphinity Data 14 noiembrie 2024 12:53:14
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
#define lim 100010
using namespace std;

ifstream in("scmax.in");
ofstream out("scmax.out");

int dp[lim], v[lim], dad[lim], lmax, n;

int bs(int val)// cel mai din dreapta elem < val
{
    int pz, mask;
    for(mask=1; mask<=lmax; mask<<=1);
    pz=0;
    for(;mask; mask>>=1)
        if(pz+mask<=lmax)
            if(v[dp[pz+mask]]<val)
                pz+=mask;
    return pz;
}

void parc(int n)
{
    if(dad[n])
        parc(dad[n]);
    out<<v[n]<<' ';
}

int main() 
{
    int n, pz;
    in>>n;
    for(int i=1; i<=n; i++)
        in>>v[i];
    
    v[0]= 1<<30;
    
    for(int i=1; i<=n; i++)
    {
        pz=bs(v[i]);
        lmax=max(lmax, pz+1);
        dp[pz+1]=i;
        dad[i]=dp[pz];
    }
    out<<lmax<<'\n';
    parc(dp[lmax]);
    
}