Cod sursa(job #2647383)

Utilizator flv.ghGherasim Flavius-Sebastian flv.gh Data 4 septembrie 2020 11:54:12
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100001],n,best[100001],rasp,parinte[100001],pozitie[1000001],w[100001],crasp;
int main()
{
    f>>n;
    for(int i=1; i<=n; ++i)
    {
        f>>v[i];
    }
    best[1]=v[1];
    pozitie[1]=1;
    parinte[1]=0;
    rasp=1;
    for(int i=2; i<=n; ++i)
    {
        if(v[i]>best[rasp])
        {
            rasp++;
            best[rasp]=v[i];
            pozitie[rasp]=i;
            parinte[i]=pozitie[rasp-1];
        }
        else
        {
            int in=1,sf=rasp,poz=0;
            while(in<=sf)
            {
                int mij=(in+sf)/2;
                if(best[mij]>=v[i])
                {
                    sf=mij-1;
                    poz=mij;
                }
                else
                {
                    in=mij+1;
                }
            }
            best[poz]=v[i];
            pozitie[poz]=i;
            parinte[i]=pozitie[poz-1];
        }
    }
    g<<rasp<<'\n';
    crasp=rasp;
    int x = pozitie[rasp];
    while(x != 0)
    {
        w[rasp]=v[x];
        x = parinte[x];
        rasp--;
    }
    for(int i=1; i<=crasp; ++i)
    {
        g<<w[i]<<" ";
    }

    return 0;
}