Cod sursa(job #2811025)

Utilizator victorzarzuZarzu Victor victorzarzu Data 30 noiembrie 2021 21:41:47
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
int d[100001], v[100001], t[100001];

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

void reconstruct(int x)
{
  if(t[x])
    reconstruct(t[x]);
  g<<v[x]<<" ";  
}

void solve()
{
  d[1] = 1;
  int len = 1;
  
  for(int i = 2;i <= n;++i)
    {
      int left = 1, right = len, mid;

      while(left <= right)
      {
        mid = (left + right) >> 1;

        if(v[d[mid]] >= v[i])
          right = mid - 1;
        else
          left = mid + 1; 
      }
      if(left > len)
      {
        ++len;
        d[len] = i;
        t[i] = d[len - 1];
      }
      else
      {
        d[left] = i;
        t[i] = d[left - 1];
      }
    }

  g<<len<<'\n';  
  reconstruct(d[len]);
}

int main()
{
  read();
  solve();
  return 0;
}