Cod sursa(job #2390384)

Utilizator vladvaculinVlad V vladvaculin Data 27 martie 2019 23:28:20
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, a[100002], M[100002], P[100002];
void afis(int le, int k){
    if(le != 0){
        afis(le-1, P[k]);
    }
    fout << a[k]<<" ";
}
void dp(){
    int lo, hi, mid, newl , len = 0;
    for(int i = 0; i<n; i++){
        lo = 1;
        hi = len;

        while(lo <= hi){
            mid = (lo+hi)/2;
            if(a[M[mid]] < a[i])
                lo = mid+1;
            else
                hi = mid - 1;
        }
        newl = lo;

        P[i] = M[newl - 1];
        M[newl] = i;

        if(newl > len){

            len = newl;
        }
    }

    int k = M[len];
    fout << len<<"\n";
    afis(len-1, M[len]);

}

int main(){
    fin >> n;
    for(int i = 0; i<n; i++){
        fin >> a[i];
    }

    dp();
    return 0;
}