Cod sursa(job #2772064)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 30 august 2021 17:24:58
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, m, v[100005];
int p[100005], t[100005];
int st, dr, md;

void drum(int poz){
    if(poz != -1)
        drum(t[poz]);
    else
        return;
    fout<<v[poz]<<" ";
}

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

    m=0;
    v[0]=-1;
    p[0]=-1;

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

        if(st > m){
            m++;
            p[m]=i;
            t[i]=p[m-1];
        }else
            if(v[i] < v[p[st]]){
                p[st]=i;
                t[i]=p[st-1];
            }
    }
    fout<<m<<"\n";
    drum(p[m]);
    return 0;
}