Cod sursa(job #2777515)

Utilizator andreibazavanAndrei Bazavan andreibazavan Data 23 septembrie 2021 16:14:41
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
long long a[100005],d[100005],p[100005];
int main()
{
    fin>>n;
    for(int i=1;i<=n;++i)
        fin>>a[i];
    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 st=1,dr=k,caut=k+1;
            while(st<=dr)
            {
                int mij=(st+dr)/2;
                if(d[mij]>a[i])
                {
                    caut=mij;
                    dr=mij-1;
                }
                else st=mij+1;
            }
        d[caut]=a[i];
        p[i]=caut;
        }
    }
    fout<<k<<'\n';
    int j=n;
    for(int i=k;i>=1;--i)
    {
        while(p[j]!=i)
            j--;
        d[i]=j;
    }
    for(int i=1;i<=k;++i)
    fout<<a[d[i]]<<' ';
    fout<<'\n';
    return 0;
}