Cod sursa(job #3262199)

Utilizator ImphinityComan Razvan Ioan Imphinity Data 9 decembrie 2024 10:49:27
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>
#define cin in
#define cout out
#define lmx 100001
using namespace std;

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

int bSerch(int v[], int x, int st, int dr)
{
    if(st==dr)
        return st;
    int mij=(st+dr)/2;
    if(v[mij]>=x)
        return bSerch(v, x, st, mij);
    return bSerch(v, x, mij+1, dr);
}

int main()
{
    int A[lmx]={0}, B[lmx]={0}, dp[lmx]={0}, R[lmx]={0};
    int n;
    cin>>n;
    
    for(int i=1; i<=n; i++)
    {
        cin>>A[i];
        B[i]=INT_MAX;
    }
    
    for(int i=1;i<=n;i++)
    {
        int poz=bSerch(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]);
        
    cout<<lmax;
    int cpy=lmax;
    for(int i=n; i>=1; i--)
    {
        if(dp[i]==lmax)
        {
            R[lmax]=A[i];
            lmax--;
        }
    }
    
    cout<<'\n';
    
    for(int i=1;i<=cpy;i++)
        cout<<R[i]<<' ';
}