Cod sursa(job #2521410)

Utilizator bodea.georgianaBodea Georgiana bodea.georgiana Data 10 ianuarie 2020 20:22:30
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#define N 100002

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

int lg[N],sol[N],nr,v[N],pred[N];

void afis(int poz)
{
    if(poz)
    {
        afis(pred[poz]);
        g<<v[poz]<<' ';
    }
}
int dinamica(int x)
{
    if(nr==0 || v[sol[nr]]<x)
    {
        ++nr;
        return nr;
    }
    else
    {
        int st=1,dr=nr,mij;
        int poz=0;///NU UITA de initializarea asta!!!!
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(v[sol[mij]]<x)
                poz=mij,st=mij+1;
            else
                dr=mij-1;
        }
        return poz+1;
    }
}
int main()
{

    int n,x,poz,ma=0,st;
    f>>n;
    for(int i=1;i<=n;++i)
    {
        f>>x,v[i]=x;
        poz=dinamica(x);
        sol[poz]=i;
        lg[i]=lg[sol[poz-1]]+1;
        pred[i]=sol[poz-1];
        if(lg[i]>ma)
            ma=lg[i],st=i;

    }
    g<<ma<<"\n";
    afis(st);
    f.close();
    g.close();
    return 0;
}