Cod sursa(job #2711862)

Utilizator RaresPoinaruPoinaru-Rares-Aurel RaresPoinaru Data 24 februarie 2021 19:43:28
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#define dim 100009
using namespace std;
ifstream fin ("scmax.in");
ofstream fout("scmax.out");

int n,v[dim],d[dim],p[dim],ans[dim],k;

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    for(int i=1;i<=n;i++)
    {
        if(v[i]>d[k])
            d[++k]=v[i],
            p[i]=k;
        else
        {
            int st=1,dr=k,poz=k+1;
            while(st<=dr)
            {
                int mij=(st+dr)/2;
                if(v[i]<=d[mij])
                {
                    poz=mij;
                    dr=mij-1;
                }
                else
                    st=mij+1;
            }
            d[poz]=v[i];
            p[i]=poz;
        }
    }
    fout<<k<<'\n';
    int j=n;
    for(int i=k;i>=1;i--)
    {
        while(p[j]!=i)
            j--;
        ans[i]=v[j];
    }
    for(int i=1;i<=k;i++)
        fout<<ans[i]<<' ';
}