Cod sursa(job #2577678)

Utilizator OvidRata Ovidiu Ovid Data 9 martie 2020 18:25:52
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
ifstream fin("scmax.in"); ofstream fout("scmax.out");

int lm=0;
int a[100010], u[100010], n;
string l[100010];


int bs(int x, int r, int l){
int m=r+l; m/=2;

if(l<r){return -1;}


if( x>u[m] && (x<=u[m+1] || m>=lm ) ){return m+1;}

if(l==r){if(x<=u[m]){return m;}else{return -1;} }


if(x<=u[m]){return bs(x, r, m);}
if(x>u[m+1] ){return bs(x, m+1, l) ; }


}




int main(){
fin>>n;

for(int i=1; i<=n; i++){
    fin>>a[i];
    if(lm<1){u[1]=a[i]; lm++; l[1]=to_string(a[i]); continue;}
    int p=bs(a[i], 1, lm);

    if(p>0){
        l[p]=l[p-1]+" "+to_string(a[i]);
        u[p]=a[i];
    }
    lm=max(lm, p);
}

if(l[lm][0]==' '){l[lm]=l[lm].substr(1, l[lm].length()-1 );}
fout<<lm<<"\n"<<l[lm];




return 0;
}