Cod sursa(job #2969951)

Utilizator raileanu-alin-gabrielRaileanu Alin-Gabriel raileanu-alin-gabriel Data 23 ianuarie 2023 21:50:28
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
const int NMAX=100005;

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

int bs(int);
void afis(int);

int uz[NMAX], dp[NMAX], poz[NMAX];
int n, gasit, lg;

int main()
{
  int i;
  fin>>n;
  for(i=1; i<=n; i++)
  {
    fin>>uz[i];
    gasit=bs(uz[i]);
    dp[gasit]=i;
    poz[i]=dp[gasit-1];
  }
  fout<<lg<<'\n';
  afis(dp[lg]);
}

void afis(int nr)
{
  if(nr==0) return;
  afis(poz[nr]);
  fout<<uz[nr]<<' ';
}

int bs(int nr)
{
  int st, dr, mij, gasit=lg+1;
  st=1;
  dr=lg;
  while(st<=dr)
  {
    mij=(st+dr)/2;
    if(uz[dp[mij]]>=nr)
    {
      dr=mij-1;
      gasit=mij;
    }
    else st=mij+1;
  }
  if(gasit>lg) return ++lg;
  return gasit;
}