Cod sursa(job #1766634)

Utilizator BogauuuBogdan Ivancu Bogauuu Data 28 septembrie 2016 10:56:12
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>

using namespace std;

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

int n,i,k,p,u,mid,v[100002],d[100002],t[100002],w[100002],k2,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){
            mid=(p+u)/2;
            if (v[d[mid]]<v[i])
                p=mid+1;
            else
                u=mid-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;
}