Cod sursa(job #2558662)

Utilizator radugheoRadu Mihai Gheorghe radugheo Data 26 februarie 2020 18:43:40
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, k, i, st, dr, mid;
int v[100005], d[100005], dad[100005];

void subsir (int a){
    if (a){
        subsir (dad[a]);
        fout << v[a] << " ";
    }
}

int main(){
    fin >> n;
    for (i=1; i<=n; i++){
        fin >> v[i];
    }
    d[1] = 1, k = 1;
    for (i=2; i<=n; i++){
        st = 1, dr = k;
        while (st <= dr){
            mid = st + (dr - st)/2;
            if (v[d[mid]] >= v[i]){
                dr = mid - 1;
            }
            else{
                st = mid + 1;
            }
        }
        if (st > k){
            d[++k] = i;
        }
        else{
            d[st] = i;
        }
        dad[i] = d[st - 1];
    }
    fout << k << "\n";
    subsir (d[k]);
    return 0;
}
//recapitulare