Cod sursa(job #2969284)

Utilizator LucaT2Tasadan Luca LucaT2 Data 22 ianuarie 2023 19:48:41
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,a[100005],d[100005],p[100005];

void citire()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>a[i];
}

void sclm()
{
    int k=1;
    d[k]=a[1];
    p[1]=1;
    for(int i=2;i<=n;i++)
    {
        if(a[i]>d[k])
            d[++k]=a[i],p[i]=k;
        else
        {
            int poz=k+1,st=1,dr=k;
            while(st<=dr)
            {
                int mij=(st+dr)/2;
                if(d[mij]>=a[i])
                    poz=mij,dr=mij-1;
                else
                    st=mij+1;
            }
            d[poz]=a[i];
            p[i]=poz;
        }
    }
    fout<<k<<"\n";
    int j=n;
    int sol[100005];
    for(int i=k;i>=1;i--)
    {
        while(p[j]!=i)
            j--;
        sol[i]=j;
    }
    for(int i=1;i<=k;i++)
        fout<<a[sol[i]]<<" ";
}

int main()
{
    citire();
    sclm();
    return 0;
}