Cod sursa(job #2778541)

Utilizator e_ggIonescu Dorian e_gg Data 1 octombrie 2021 17:52:14
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, a[100001],dp[100001],r[100001],p[100001],lma,st,dr,mij,poz;
int main()
{
  f>>n;
  for(int i=1;i<=n;i++)
    f>>a[i];
  dp[++lma]=a[1];
  p[1]=1;
  for(int i=2;i<=n;i++){
    if(a[i]>dp[lma]){
      dp[++lma]=a[i];
      p[i]=lma;
    }
    else{
      st=1;
      dr=lma;
      poz=lma+1;
      while(st<=dr){
        mij=st+(dr-st)/2;
        if(dp[mij]>=a[i]){
          poz=mij;
          dr=mij-1;
        }
        else
          st=mij+1;
      }
      dp[poz]=a[i];
      p[i]=poz;
    }
  }
  g<<lma<<'\n';
  int j=n;
  for(int i=lma;i>=1;i--){
    while(p[j]!=i)
      j--;
    r[i]=a[j];
  }
  for(int i=1;i<=lma;i++)
    g<<r[i]<<' ';
  return 0;
}