Cod sursa(job #2796718)

Utilizator sandifx68Fazakas Alexandru sandifx68 Data 8 noiembrie 2021 18:44:48
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int s[100005],v[100005],p[100005],n,l,pow=1,pos,r[100005];

int cb(int x){
    int h=0,i;
    for(h=pow,i=l;h>0;h>>=1){
        if(i-h>0 && s[i-h]>=x)
            i-=h;
    }
    //cout<<i<<" ";
    return i;
}

int main()
{
    f>>n;
    while(pow<n) pow<<=1;
    for(int i=1;i<=n;i++){
        f>>v[i];
        if(v[i]>s[l]){
            s[++l]=v[i];
            p[i]=l;
        } else {
            p[i]=cb(v[i]);
            s[p[i]]=v[i];
        }
    }
    int i=n,c=l;
    while(l){
        if(p[i]==l){
            r[l]=v[i];
            l--;
        }
        i--;
    }
    g<<c<<"\n";
    for(int i=1;i<=c;i++)
        g<<r[i]<<" ";
}