Cod sursa(job #1808076)

Utilizator razvandraghiciDraghici Razvan razvandraghici Data 17 noiembrie 2016 12:08:49
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>

using namespace std;

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

int n, v[100003], i, mij, k, st, dr, d[100003], t[100003], sol[100003], j;
int main()
{
    fin>>n;
    for(i=1;i<=n;i++){
        fin>>v[i];
    }

    d[1]=1;
    k=1;
    for(i=2;i<=n;i++){
        st=1;
        dr=k;
        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];
    }

    fout<<k<<"\n";
    i=d[k];
    while(i!=0){
        sol[++j]=i;
        i=t[i];
    }
    for(i=k;i>=1;i--)
        fout<<v[sol[i]]<<" ";
    return 0;
}