Cod sursa(job #3317632)

Utilizator TeodoRazvanStancu Teodor-Razvan TeodoRazvan Data 24 octombrie 2025 17:50:20
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

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

vector<int> v,dp,vm;

void refac(int p,int l,int vm){
    if(!l) return;
    if(dp[p]==l&&v[p]<vm){
        refac(p-1,l-1,v[p]);
        fout<<v[p]<<" ";
    }else{
        refac(p-1,l,vm);
    }
}

int caut_bin(vector<int>&v,int n,int x){
    int st=1,dr=n,rez=st-1;
    while(st<=dr){
        int m=(st+dr)/2;
        if(v[m]<x){
            rez=m;
            st=m+1;
        }else{
            dr=m-1;
        }
    }
    return rez;
}

int main(){
    int n;
    fin>>n;
    v.resize(n);
    dp.resize(n);
    vm.resize(n+1);
    int imax=0,nvm=0;
    for(int i=0;i<n;i++){
        fin>>v[i];
        int j=caut_bin(vm,nvm,v[i]);
        if(j+1>nvm) nvm++;
        dp[i]=j+1;
        vm[j+1]=v[i];
        if(dp[i]>dp[imax]) imax=i;
    }
    fout<<dp[imax]<<'\n';
    refac(imax,dp[imax],INT_MAX);
    return 0;
}