Cod sursa(job #1540179)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 2 decembrie 2015 12:46:51
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>
using namespace std;

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

long mx,p,n,v[100005],i,poz[100005],ant[100005];

void rec(long nod)
{
    if (ant[nod]!=0)
        rec(poz[ant[nod]]);
    g<<v[nod]<<' ';
}


int main()
{
    f>>n;
    for (i=1;i<=n;i++)
        f>>v[i];
    for (i=1;i<=n;i++)
    {
        long j;
        for (j=1;j<=mx;j<<=1);
        j>>=1;
        for (p=0;j>0;j>>=1)
            if (v[poz[p+j]]<v[i] && p+j<=mx)
                p=p+j;
        if (poz[p+1]==0 || v[poz[p+1]]>v[i])
        {
            if (poz[p+1]==0)
                mx=p+1;
            poz[p+1]=i;
        }
        ant[i]=p;
    }
    g<<mx<<'\n';
    rec(poz[mx]);
    return 0;
}