Cod sursa(job #1638314)

Utilizator pibogaBogdan piboga Data 7 martie 2016 22:28:30
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>

using namespace std;

ifstream fin ("scmax.in");
ofstream fout ("scmax.out");

int n,i,x,s,d,p,mij,v[100010],ok,l[100010],D,a[100010],poz,maxl;
int z,afis[100010];

int main()
{
    fin >>n;

    fin>>a[1];
    x=a[1];
    v[1]=x;

    p=0;
    s=1;
    mij=0;
    l[1]=1;
    d=1;
    for (i=2;i<=n;i++)
    {
        s=1;
        D=d;

        ok=0;
        fin >>a[i];
        x=a[i];
        while (s<=d)
        {
            mij=(d-s)/2+s;
            if (v[mij]<x)
            {
                s=mij+1;
                ok=1;
            }
            else
            {
                d=mij-1;
                ok=2;
            }
        }
        if (ok==1)
        {
            v[mij+1]=x;
            l[i]=mij+1;
            d=mij+1;
        }
        else
        {
            v[mij]=x;
            l[i]=mij;
            d=D;
        }

    }
    for (i=1;i<=n;i++)
    {
        if (l[i]>=maxl)
        {
            maxl=l[i];
            poz=i;
        }
       // fout << l[i]<<' ' ;
    }
    afis[++z]=poz;

    fout <<maxl<<'\n';

    while (maxl)
    {
    for (i=poz-1;i>=1;i--)
    {
        if (l[i]==maxl)
        {
            if (a[i]<a[poz])
            {
                afis[++z]=i;
                poz=i;
                break;
            }
        }
    }
    maxl--;
    }
    for (i=z;i>=1;i--)
        fout << a[afis[i]]<<' ';

    return 0;
}