Cod sursa(job #2521406)

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

using namespace std;

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

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()
{
    ifstream f("scmax.in");
    ofstream g("scmax.out");
    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;
        if(lg[i]>ma)
            ma=lg[i];

    }
    g<<ma<<"\n";
    for(int k=1;k<=ma;++k)
    {
        st=2000000002;
        for(int i=1;i<=n;++i)
            if(lg[i]==k && st>v[i])
                st=v[i];
        g<<st<<' ';
    }
    f.close();
    g.close();
    return 0;
}