Cod sursa(job #2493628)

Utilizator oso.andinoooIonut Stan oso.andinooo Data 16 noiembrie 2019 17:06:57
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>
using namespace std;

int x[100005], v[100005], l, pred[100005];

int cautbin(int val) {
    if (val > v[x[l]]) {
        return l + 1; }
    int st =1;
    int dr = l + 1;
    int m;
    while (st < dr) {
        m =  (st + dr) / 2;
        if ( v[x[m]] >= val)
            dr = m;
        else
            st = m + 1; }
    return st; }

void subsir(int p) {
    if (p == 0) {
        return; }
    subsir(pred[p]);
    printf("%d ", v[p]); }

int main() {
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    int n, j;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &v[i]); }
    x[++l] = 1;
    for(int i = 2; i <= n; i++) {
        j = cautbin(v[i]);
        pred[i] = x[j - 1];
        if(j > l) {
            l = j; }
        x[j] = i; }
    printf("%d\n", l);
    subsir(x[l]);
    return 0; }