Cod sursa(job #2719375)

Utilizator victorzarzuZarzu Victor victorzarzu Data 9 martie 2021 19:59:18
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>
#define oo 0x3f3f3f3f

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, a[100005], d[100005], t[100005], l, r, pos, len, m;

void Read()
{
  f>>n;
  for(int i = 1;i <= n;++i)
    f>>a[i];
}

void recon(int x)
{
  if(t[x])
    recon(t[x]);
  g<<a[x]<<" ";
}

void Solve()
{
  len = d[1] = 1;
  for(int i = 2;i <= n;++i)
  {
    l = 1, r = len;
    while(l <= r)
    {
      m = (l + r) >> 1;
      if(a[d[m]] >= a[i])
        r = m - 1;
      else
        l = m + 1;
    }

    if(l > len)
    {
      ++len;
      d[len] = i;
      t[d[len]] = d[len - 1];
    }
    else
    {
      d[l] = i;
      t[d[l]] = d[l - 1];
    }
  }
  g<<len<<'\n';
  recon(d[len]);
}
int main()
{
  Read();
  Solve();
  return 0;
}