Cod sursa(job #1513028)

Utilizator EberardoVladianu Cosmin Eberardo Data 28 octombrie 2015 21:48:56
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,lmax=0;
int v[100001],sol[100001],pre[100001];
int m[100001];
void citire()
{
    int i;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
}
void cautare_binara(int nod)
{
    int st=1,dr=lmax;
    while(st<=dr)
    {
        int div=(st+dr)/2;
        if(v[m[div]]<v[nod])
            st=div+1;
        else
            dr=div-1;
    }
    int newl;
    newl=st;
    m[newl]=nod;
    pre[nod]=m[newl-1];
    if(newl>lmax)
        lmax=newl;
}
void afisare()
{
    for(int i=1;i<=lmax;i++)
        fout<<sol[i]<<' ';
}
void rez()
{
    int i;
    for(i=1;i<=n;i++)
        cautare_binara(i);
    fout<<lmax<<'\n';
    int nod=m[lmax];
    for(i=lmax;i;i--)
    {
        sol[i]=v[nod];
        nod=pre[nod];
    }
    afisare();
}
int main()
{
    citire();
    rez();
    return 0;
}