Cod sursa(job #2527219)

Utilizator mihaela.macarie01@yahoo.comMihaela Macarie [email protected] Data 19 ianuarie 2020 20:24:46
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream x("scmax.in");
ofstream y("scmax.out");

int n,v[100002],l[100002],b[100002],pred[100002],nr,lmax;

void afis(int i)
{
    if(pred[i])
        afis(pred[i]);
    y<<v[i]<<" ";
}

int cau(int k)
{
    int st,dr,mij;
    st=0;
    dr=nr;
    mij=(st+dr)/2;
    while(st<=dr)
    {
        if(v[l[mij]]<k && v[l[mij+1]]>=k)
            return mij;
        else
            if(v[l[mij+1]]<k)
                st=mij+1,mij=(st+dr)/2;
            else
                dr=mij-1,mij=(st+dr)/2;
    }
    return nr;
}

int main()
{
    int i,j,poz;
    nr=1;
    x>>n;
    for(i=1;i<=n;i++)
        x>>v[i];
    b[1]=l[1]=1;
    l[0]=0;
    for(i=2;i<=n;i++)
    {
        poz=cau(v[i]);
        pred[i]=l[poz];
        b[i]=poz+1;
        l[poz+1]=i;
        if(nr<poz+1)
            nr=poz+1;
    }
    lmax=poz=0;
    for(i=1;i<=n;i++)
        if(lmax<b[i])
            lmax=b[i],poz=i;
    y<<lmax<<'\n';
    afis(poz);
    x.close();
    y.close();
    return 0;
}