Cod sursa(job #2304561)

Utilizator radugheoRadu Mihai Gheorghe radugheo Data 18 decembrie 2018 10:35:59
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <limits.h>

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

int n, i, j, pp, maxim, poz, v[100005], b[100005], l[100005], p[100005];

inline int print (int a){
    if (p[a] > 0){
        print (p[a]);
    }
    fout << v[a] << " ";
}

inline int cautareBinara (int x){
    int st, dr, mid;
    st = 0;
    dr = pp;
    while (st <= dr){
        mid = st + (dr - st)/2;
        if (v[l[mid]] < x && v[l[mid+1]] >= x){
            return mid;
        }
        if (v[l[mid+1]] < x){
            st = mid + 1;
        }
        else{
            dr = mid - 1;
        }
    }
    return pp;
}

int main()
{
    fin >> n;
    for (i=1; i<=n; i++){
        fin >> v[i];
    }
    pp = 1;
    l[1] = 1, b[1] = 1;
    for (i=2; i<=n; i++){
        poz = cautareBinara (v[i]);
        p[i] = l[poz];
        b[i] = poz + 1;
        l[poz+1] = i;
        if (pp < poz + 1){
            pp = poz + 1;
        }
    }
    maxim = 0, poz = 0;
    for (i=1; i<=n; i++){
        if (b[i] > maxim){
            maxim = b[i];
            poz = i;
        }
    }
    fout << maxim << "\n";
    print (poz);
    return 0;
}