Cod sursa(job #1829851)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 15 decembrie 2016 19:02:01
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>
#include <algorithm>
using namespace std;

int L[100005], prv[100005];

int binarySearch(int lf, int rg, int x){
    int i,step;
    for(step = 1;step <= rg;step <<= 1);
    for(i = 0;step;step >>= 1){
        if(i + step <= rg && L[i + step] <= x){
            i += step;
        }
    }
    return i;
}

void dfs(int cnt){
    if(cnt == 0){
        return;
    }
    dfs(cnt - 1);
    printf("%d ", L[cnt]);
}

int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    int p,n,cnt,i,x;
    cnt = 0;
    scanf("%d", &n);
    for(i = 1;i <= n;i++){
        scanf("%d", &x);
        p = binarySearch(1, cnt, x - 1) + 1;
        if(p > cnt){
            cnt++;
        }
        L[p] = x;
        prv[p] = L[p - 1];
    }
    printf("%d\n", cnt);
    dfs(cnt);
    return 0;
}