Cod sursa(job #1808058)

Utilizator osiaccrCristian Osiac osiaccr Data 17 noiembrie 2016 11:27:53
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define DEF 100003

using namespace std;

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

int n,v[DEF],R[DEF],T[DEF],i,ln,F[DEF];

int main(){
    fin >> n;
    for (i = 1; i <= n; i ++){
        fin >> v[i];
        //R[i] = -1;
    }

    T[1] = 1; ln = 1;

    for (i = 2; i <= n; i++){
        int st=1;
        int dr=ln;
        int mid;
        while(st<=dr)
        {
            mid=(st+dr)/2;
            if(v[T[mid]]<v[i])
            {
                st=mid+1;
            }
            else
                dr=mid-1;
        }
        if(st>ln) ln++;
        T[st]=i;
        R[i]=T[st-1];
    }

    fout<<ln<<'\n';
    int curr = T[ln];
    int k=0;
    while(curr!=0){
        F[++k] = v[curr];
        curr = R[curr];
    }
    for (i = k; i >= 1; i--){
        fout<<F[i]<<" ";
    }


    return 0;
}