Cod sursa(job #3171298)

Utilizator Robert_NicuNicu Robert Cristian Robert_Nicu Data 18 noiembrie 2023 17:54:00
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
#define DIM 100001
using namespace std;

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

int n, st, dr, mij, len, poz;
int v[DIM], dp[DIM], p[DIM], ans[DIM];
int i, j;

int main(){
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>v[i];
    dp[len=1]=v[1];
    p[1]=1;
    for(i=2; i<=n; i++){
        if(v[i]>dp[len]){
            dp[++len]=v[i];
            p[i]=len;
        }else{
            st=1, dr=len;
            while(st<=dr){
                mij=(st+dr)/2;
                if(dp[mij]>=v[i])
                    poz=mij, dr=mij-1;
                else st=mij+1;
            }
            dp[poz]=v[i];
            p[i]=poz;
        }
    }
    j=n;
    for(i=len; i>0; i--){
        while(p[j]!=i)
            j--;
        ans[i]=v[j];
    }
    fout<<len<<"\n";
    for(i=1; i<=len; i++)
        fout<<ans[i]<<" ";
}