Cod sursa(job #945129)

Utilizator costyrazvyTudor Costin Razvan costyrazvy Data 30 aprilie 2013 16:18:24
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <algorithm>
using namespace std;
int poz,pz,i,st,dr,mij,n,lmax,x[100001],y[100001],a[100001],v[100001],mx,k;
int main()
{
    ifstream f("scmax.in");
    ofstream g("scmax.out");
    f>>n;
    for (i=1;i<=n;i++) f>>a[i];

    x[1]=a[1];

    lmax=1;y[1]=1;

    for (i=2;i<=n;i++)
    {
        st=1;
        dr=lmax;
        pz=0;

        while (st<=dr && poz==0)
        {
            mij=(st+dr)/2;
            if (x[mij]==a[i]) pz=mij;
            else if (x[mij]>a[i]) dr=mij-1;
            else st=mij+1;
        }
        if (pz==0) pz=st;
        x[pz]=a[i];
        if (st>lmax) lmax=st;
        y[i]=pz;
        if (y[i]>mx) mx=y[i];
    }
    g<<mx<<'\n';
    for (i=1; i<=n; i++) if (y[i]==mx) poz=i;
    k=1;
    v[1]=a[poz];
    lmax=y[poz];
    for (i=poz-1; i>=1; i--)
       if (y[i]==lmax-1)
        {
            lmax--;
            k++;
            v[k]=a[i];
        }
    for (i=k;i>=1;i--) g<<v[i]<<" ";
    g<<'\n';
    f.close();
    g.close();
    return 0;
}