Cod sursa(job #1781714)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 17 octombrie 2016 11:47:11
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fi("scmax.in");
ofstream fo("scmax.out");

int v[100001], u[100001], ord[100001], PUTERE;
int out[100001];

inline int CB(int x, int poz){
  int pas=PUTERE, rez=0;
  for(pas/=2;pas>0;pas/=2)
    if(rez+pas<=poz && x>u[v[rez+pas]])
      rez+=pas;
  return rez;
}


int main()
{
  int n, i, poz, maxim=0;
  fi>>n;
  PUTERE=1;
  while(PUTERE<n)
    PUTERE*=2;
  for(i=1;i<=n;i++)
    fi>>u[i];
  int lim=0;
  for(i=1;i<=n;i++){
    poz=CB(u[i],lim);
    v[poz+1]=i;
    if(poz+1>lim)
        lim=poz+1;
    ord[i]=v[poz];
    if(poz+1>maxim)
      maxim=poz+1;
  }
  fo<<maxim<<'\n';
  i=v[maxim];
  poz=0;
  do{
    out[poz++]=u[i];
    i=ord[i];
  }while(i!=0);
  for(poz--;poz>=0;poz--)
    fo<<out[poz]<<' ';
  fi.close();
  fo.close();
  return 0;
}