Cod sursa(job #2779681)

Utilizator Diana_IonitaIonita Diana Diana_Ionita Data 4 octombrie 2021 18:50:19
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb

#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,k,j,st,ok,dr,m,rez[100005],a[100005],c[100005],l[100005];
int main()
{
    fin>>n;
    for(i=1; i<=n; i++)
    {
        fin>>a[i];

    }
    k=1;
    c[1]=a[1];
    l[1]=1;

    for(i=2; i<=n; i++)
    {
        if(c[k]<a[i])
        {
            c[++k]=a[i];
            l[i]=k;
        }
        else
        {
            st=1;
            dr=k;ok=k+1;
            while(st<=dr)
            {
                m=(st+dr)/2;
                if(c[m]<a[i])st=m+1;
                else ok=m,dr=m-1;
            }
            c[ok]=a[i];
            l[i]=ok;

        }
    }
    j=n;fout<<k<<'\n';
    for(i=k;i>0;i--)
    {
        while(l[j]!=i)
        {
            j--;
        }
    rez[i]=a[j];
    }
    for(i=1;i<=k;i++)
    {
        fout<<rez[i]<<" ";
    }
    return 0;
}