Cod sursa(job #3178143)

Utilizator strimbumarkMark Strimbu strimbumark Data 1 decembrie 2023 09:48:29
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#define NM 100000

using namespace std;

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

int v[NM],L[NM],p[NM],best[NM];
int nr;

int caut(int x){
    
    int p,u,mij;
    p = 0; u = nr; mij = (p+u)/2;
    
    while(p<=u)
    {
        if(v[L[mij]]< x && v[L[mij+1]]>=x) return mij;
        else if(v[L[mij]] < x){ p = mij+1; mij = (p+u)/2;}
        else{ u = mij-1; mij = (p+u)/2;}
    }
    
    return nr;
    
}
void afis(int i)
{
    if(p[i]>0) afis(p[i]);
    cout<<v[i]<<" ";
}


int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
    }
    
    int poz;
    nr=1;
    L[1]=1;L[0]=0;
    p[0]=0;
    best[1]=1;
    for(int i=2;i<=n;i++)
    {
        poz=caut(v[i]);
        p[i]= L[poz];
        best[i]=poz+1;
        L[poz+1] = i;
        if(nr<poz+1) nr=poz+1;
    }
    
    cout<<nr<<"\n";
    afis(L[nr]);
    
    
        
        
    
}