Cod sursa(job #3261644)

Utilizator nopreanOprean Natasha noprean Data 7 decembrie 2024 10:03:57
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int A[100001];
int B[100001];
int dp[100001];
int R[100001];
int caut_binar(int b[], int x,int st,int dr)
{
    if(st==dr)
        return st;
    int mijl=(st+dr)/2;
    if(b[mijl]>=x)
        return caut_binar(b,x,st,mijl);
    return caut_binar(b,x,mijl+1,dr);
}
int main()
{
    int n;
    fin>>n;
    for(int i=1;i<=n;i++)
        B[i]=INT_MAX;
    for(int i=1;i<=n;i++)
    {
        fin>>A[i];
    }
    B[0]=0;
    //B[1]=1;
    for(int i=1;i<=n;i++)
    {
        int poz=caut_binar(B,A[i],0,n);
        dp[i]=poz;
        B[poz]=A[i];
    }
    int lmax=0;
    for(int i=1;i<=n;i++)
    {
        lmax=max(lmax,dp[i]);
    }
    fout<<lmax;
    int cop_lmax=lmax;
    for(int i=n;i>=1;i--)
    {
        if(dp[i]==lmax)
        {
            R[lmax]=A[i];
            lmax--;
        }
    }
    fout<<'\n';
    for(int i=1;i<=cop_lmax;i++)
        fout<<R[i]<<" ";

    return 0;
}