Cod sursa(job #1020164)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 1 noiembrie 2013 19:12:12
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
using namespace std;

int n, a[100002],b[100002], c[100002], lmax;

int cb(int a[], int b[], int p, int q, int v)
{
    int mij;
    while (p<=q)
    {
        mij=p+(q-p)/2;
        if (v<a[b[mij]]) p=mij+1;
        else q=mij-1;
    }
    return p;
}

int main()
{
    int i,l;
    ifstream fin("scmax.in");
    ofstream fout("scmax.out");
    fin>>n;
    for (i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    a[0]=2100000000;
    b[0]=0;
    lmax=0;
    for (i=n;i>=1;i--)
    {
        l=cb(a,b,0,lmax,a[i]);
        if (l>lmax)
        {
            c[i]=b[l-1];
            lmax=l;
            b[l]=i;
        }
        else
        {
            c[i]=b[l-1];
            if (a[b[l]]<a[i])
            {
                b[l]=i;
            }
        }
    }
    fout<<lmax<<"\n";
    for (i=b[lmax];i>0;i=c[i])
    {
        fout<<a[i]<<" ";
    }
    fin.close();
    fout.close();
    return 0;
}