Cod sursa(job #2129103)

Utilizator darkviper17Dark Viper darkviper17 Data 12 februarie 2018 15:29:15
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int T = 100001;

int v[T], pred[T], poz[T], m, n, j;

int binary_search(int x)
{
  int r = 0, pas = 1 << 16;
  
  while(pas)
  {
    if(r + pas <= m && v[poz[r + pas]] < x) r += pas;
    pas /= 2;
  }
  return r;
}

void subsir(int p)
{
  if(pred[p] != 0) subsir(pred[p]);
  fout << v[p] << ' ';
}

int main() {
  
  fin >> n;
  
  int i;
  
  for(i = 1; i <= n; i++)
  {
    fin >> v[i];
    
    j = binary_search(v[i]);
    
    if(j == m) m++;
    
    pred[i] = poz[j];
    
    poz[j + 1] = i;
  }
  
  fout << m << '\n';
  
  subsir(poz[m]);
  
  return 0;
}