Cod sursa(job #2766161)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 31 iulie 2021 12:06:05
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int d, dp[100005], t[100005];
int n, v[100005];
int st, dr, md;

void go(int p){
    if(t[p] != -1)
        go(t[p]);
    fout<<v[p]<<" ";
}

int main (){
    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>v[i];

    dp[0]=-1;
    d=1;
    dp[d]=1;
    t[dp[d]]=dp[d-1];

    for(int i=2; i<=n; i++){
        st=1;
        dr=d;
        while(st <= dr){
            md=(st+dr)/2;
            if(v[i] > v[dp[md]])
                st=md+1;
            else
                dr=md-1;
        }

        if(st == d+1)
            d++;
        dp[st]=i;
        t[dp[st]]=dp[st-1];
    }
    fout<<d<<"\n";
    go(dp[d]);
    return 0;
}