Cod sursa(job #1766632)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 28 septembrie 2016 10:55:30
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;
int k,n,i,j,p,u,mid,x,v[100001],d[100001],ok,w[100001],t[100001];
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");

int main (){

    fin>>n;
    for (i=1;i<=n;i++){
        fin>>v[i];
    }
    d[1] = 1;
    k = 1;
    for (i=2;i<=n;i++){
        // cautam cel mai mic nr mai mare decat v[i] in d,binar;
        // 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;
        ok = 0;
        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++;
            //p = k;
            //d[p] = i;
        }
        d[p] = i;
        t[i] = d[p-1];
    }
    fout<<k<<"\n";
    x = d[k];
    int    k2 = 0;
    while (x != 0){
        w[++k2] = v[x];
        x = t[x];
    }
    for (i=k2;i>=1;i--)
        fout<<w[i]<<" ";


    return 0;
}