Cod sursa(job #2370706)

Utilizator mihaimodiMihai Modi mihaimodi Data 6 martie 2019 13:13:30
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,v[100001],l[100001],a[100001],t[100001],nr[100001];
int k,nrk,st,dr,mij,poz;
int cautbin(int k, int x){
    int st=1;
    int dr=k;
    int sol=0;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(v[a[mij]]>=v[i])
        {
            sol=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    if(sol==0)
        sol=k+1;
    return sol;

}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    a[1]=l[1]=1;
    k=1;
    for(i=2;i<=n;i++)
    {
        int sol=cautbin(k,v[i]);
        k=max(k,sol);
        a[sol]=i;
        l[i]=sol;t[i]=a[sol-1];
        if(l[i]==k)
              poz=i;
    }
    fout<<k<<'\n';
    nrk=poz;
    for(i=k;i>=1;i--)
    {
        nr[i]=v[poz];
        poz=t[poz];
    }
    for(i=1;i<=k;i++)
        fout<<nr[i]<<' ';
    return 0;
}