Cod sursa(job #2576416)

Utilizator namesurname01Name Surname namesurname01 Data 6 martie 2020 19:13:46
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#define N 100002

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");

int pred[N],sol[N],l[N],v[N];
int nr;
int caut(int x)
{
    if(nr==0 || v[sol[nr]]<x)
    {
        ++nr;
        return nr;
    }
    int mij,st,dr,poz=0;
    st=1,dr=nr;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[sol[mij]]<x)
            poz=mij,st=mij+1;
        else
            dr=mij-1;
    }
    return poz+1;
}
void write(int n)
{
    if(n)
    {
        write(pred[n]);
        g<<v[n]<<' ';
    }
}
int main()
{
    int n,poz,imax=0;
    f>>n;
    for(int i=1;i<=n;++i)
    {
        f>>v[i];
        poz=caut(v[i]);
        sol[poz]=i;
        l[i]=l[sol[poz-1]]+1;
        pred[i]=sol[poz-1];
        if(l[i]>l[imax]) imax=i;
    }
    g<<l[imax]<<'\n';
    write(imax);
    f.close();
    g.close();
    return 0;
}