Cod sursa(job #2244643)

Utilizator mihaimodiMihai Modi mihaimodi Data 23 septembrie 2018 12:38:44
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,v[100001],l[100001],a[100001],tata[100001],sol,nr[100001],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]=1;
    l[1]=1;
    k=1;
    for(i=2;i<=n;i++){
       sol=cautbin(k,v[i]);
        k=max(k,sol);
        a[sol]=i;
        l[i]=sol;
        tata[i]=a[sol-1];
        if(l[i]==k)
              poz=i;
    }
    fout<<k<<'\n';
    nrk=poz;
    for(i=k;i>0;i--){
        nr[i]=v[poz];
        poz=tata[poz];
    }
    for(i=1;i<=k;i++)
        fout<<nr[i]<<" ";
    return 0;
}