Cod sursa(job #1766633)

Utilizator LeVladzCiuperceanu Vlad LeVladz Data 28 septembrie 2016 10:55:41
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,v[100005],mij,d[100005],t[100005],w[100005],k2,k,p,u,x;
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    d[1]=1;k=1;
    for(i=2;i<=n;i++)
    {
        //am v[d[i]] cu i de la 1 la k un sir sortat si caut in el pozitia
        //primei valori mai mare decat v[i]
        p=1;u=k;
        while(p<=u)
        {
            mij=(p+u)/2;
            if(v[d[mij]]<v[i])
            {
                p=mij+1;
            }
            else
            {
                u=mij-1;
            }
        }
        if(p==k+1)
        {
            k++;
        }
        d[p]=i;
        t[i]=d[p-1];
    }
    fout<<k<<"\n";
    x=d[k];
    while(x!=0)
    {
        w[++k2]=v[x];
        x=t[x];
    }
    for(i=k2;i>=1;i--)
    {
        fout<<w[i]<<" ";
    }
    return 0;
}