Cod sursa(job #1807990)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 17 noiembrie 2016 10:19:52
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,v[100003],i,mij,k,st,dr,d[100003],t[100003],sol[100003];
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>v[i];
    }
    d[1]=1;
    k=1;
    for(i=2;i<=n;i++)
    {
        st=1;
        dr=k;

// ultima pozitie strict < v[i]
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(v[d[mij]]<v[i])
            {
                st = mij+1;
            }
            else
            {
                dr = mij-1;
            }
        }
        if(st > k)
            k++;
        d[st]=i;
        t[i]=d[st-1];
    }
    g<<k<<'\n';
    i=d[k];
    k=0;
    while(i!=0)
    {
        sol[++k]=i;
        i=t[i];
    }
    for(i=k;i>=1;i--)
    {
        g<<v[sol[i]]<<" ";
    }
    return 0;
}