Cod sursa(job #3337446)

Utilizator Andrei_PanaAndrei Pana Andrei_Pana Data 27 ianuarie 2026 19:17:37
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
using namespace std;

ifstream cin("scmax.in");
ofstream cout("scmax.out");

#define MAXN 100000

int v[MAXN],prevpos[MAXN],lastind[MAXN];

int binSearch(int val,int st,int dr){
  while(dr-st>1){
    int mij=(st+dr)/2;
    if(v[lastind[mij]]<val){
      st=mij;
    }else{
      dr=mij;
    }
  }
  return dr;
}

void writeSol(int pos){
  if(pos!=-1){
    writeSol(prevpos[pos]);
    cout<<v[pos]<<" ";
  }
}

int main(){
  int n,i,maxl;

  cin>>n;
  for(i=0;i<n;i++){
    cin>>v[i];
  }

  maxl=0;
  for(i=0;i<n;i++){
    int len=binSearch(v[i],-1,maxl);

    lastind[len]=i;
    prevpos[i]=-1;
    if(len>0){
      prevpos[i]=lastind[len-1];
    }

    if(len==maxl){
      maxl++;
    }
  }

  cout<<maxl<<"\n";
  writeSol(lastind[maxl-1]);

  return 0;
}