Cod sursa(job #2543257)

Utilizator mihaela.macarie01@yahoo.comMihaela Macarie [email protected] Data 10 februarie 2020 23:00:36
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#define N 100002

using namespace std;

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

int n,nr,v[N],pre[N],sol[N],lg[N];

void afis(int elem)
{
    if(elem)
    {
        afis(pre[elem]);
        y<<v[elem]<<" ";
    }
}

int dinamica(int elem)
{
    if(nr==0 || v[sol[nr]]<elem)
    {
        nr++;
        return nr;
    }
    else
    {
        int st=1,dr=nr;
        int poz=0;
        while(st<=dr)
        {
            int mij=(st+dr)/2;
            if(v[sol[mij]]<elem)
                poz=mij,st=mij+1;
            else
                dr=mij-1;
        }
        return poz+1;
    }
}

int main()
{
    x>>n;
    int lng=0,poz,start;
    for(int i=1;i<=n;i++)
    {
        x>>v[i];
        poz=dinamica(v[i]);
        sol[poz]=i;
        lg[i]=lg[sol[poz-1]]+1;
        pre[i]=sol[poz-1];
        if(lg[i]>lng)
            lng=lg[i],start=i;
    }
    y<<lng<<'\n';
    afis(start);
    x.close();
    y.close();
    return 0;
}