Cod sursa(job #2975462)

Utilizator emazareMazare Emanuel emazare Data 6 februarie 2023 16:34:11
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int LMAX = 100005;
int v[LMAX],m[LMAX],l[LMAX],rez[LMAX],a[LMAX];

int main()
{
    int N,i,j,k,st,dr,mid,sol;
    fin >> N;
    for(i=1;i<=N;i++)
        fin >> v[i];
    m[1] = 1; l[1] = 1; k = 1;
    for(i=2;i<=N;i++){
        st = 1; dr = k; sol = 0;
        while(st<=dr){
            mid = (st+dr)/2;
            if(v[i]>v[l[mid]]){
                sol = mid;
                st = mid+1;
            }
            else
                dr = mid-1;
        }
        if(sol == k){
            l[++k] = i;
            m[i] = k;
            rez[i] = l[k-1];
        }
        else{
            sol++;
            m[i] = sol;
            l[sol] = i;
            rez[i] = l[sol-1];
        }
    }
    fout << k << '\n';
    j = l[k];
    for(i=k;i>0;i--){
        a[i] = v[j];
        j = rez[j];
    }
    for(i=1;i<=k;i++)
        fout << a[i] << " ";
    return 0;
}