Cod sursa(job #2304912)

Utilizator Gl0WCula Stefan Gl0W Data 18 decembrie 2018 20:01:26
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>

using namespace std;

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

int n, v[100005], d[100005], t[100005], p, u, k = 1;

void sol(int a){
    if(a){
        sol(t[a]);
        fout<<v[a]<<" ";
    }
}

int main()
{
    fin>>n;
    for(int i = 1; i <= n; i++){
        fin>>v[i];
    }
    d[1] = 1;
    for(int i = 2; i <= n; i++){
        p = 1;
        u = k;
        while(p <= u){
            int mid = (p + u) / 2;
            if(v[d[mid]] >= v[i]){
                u = mid - 1;
            }
            else{
                p = mid + 1;
            }
        }
        if(p > k){
            k++;
            d[k] = i;
            t[i] = d[p - 1];
        }
        else{
            d[p] = i;
            t[i] = d[p - 1];
        }
    }
    fout<<k<<"\n";
    sol(d[k]);
    return 0;
}