Cod sursa(job #2635461)

Utilizator mateilazarescumateilazarescu mateilazarescu Data 14 iulie 2020 15:57:06
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb

#include<fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
long long v[100004],t[100004],r[100004],vf[100004];
long long n,i,len,st,dr,mij,elem;
int main()
{
    fin>>n;
    for(i=1;i<=n;i++) fin>>v[i];
    len=1;
    t[1]=1;
    for(i=2;i<=n;i++)
    {
        if(v[i]>v[t[len]])
        {
            len++;
            t[len]=i;
            r[i]=t[len-1];
        }
        else
        {
        st= 1;
        dr = len;
        while (st < dr)
        {
            int mij = (st + dr) / 2;
            if (v[i] > v[t[mij]])
                {st = mij + 1;

                }
            else
                dr = mij;
        }
            mij=st;
            t[mij]=i;
            r[i]=t[mij-1];
        }
    }
    fout<<len<<'\n';
    int poz,k=0;
    poz=t[len];
    while(poz!=0)
    {
        k++;
        vf[k]=v[poz];
        poz=r[poz];
    }
    for(i=k;i>=1;i--) fout<<vf[i]<<" ";
    fout<<'\n';
    return 0;
}