Cod sursa(job #1780270)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 15 octombrie 2016 22:59:11
Problema Subsir crescator maximal Scor 45
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <stdio.h>

int v[100001], u[100001];
FILE *fi, *fo;

void afis(int i){
  int j=i-1;
  while(j>0 && u[j]>=u[i])
    j--;
  if(j!=0)
    afis(j);
  fprintf(fo, "%d ", u[i]);
}

inline int CB(int x, int n){
  int pas=1, rez=0;
  while(pas<n)
    pas*=2;
  for(pas/=2;pas>0;pas/=2)
    if(v[rez+pas]!=0 && x>u[v[rez+pas]])
      rez+=pas;
  return rez;
}

int main()
{
  int n, i, poz, max=0, x;
  fi=fopen("scmax.in", "r");
  fo=fopen("scmax.out", "w");
  fscanf(fi, "%d", &n);
  for(i=1;i<=n;i++)
    fscanf(fi, "%d", &u[i]);
  for(i=1;i<=n;i++){
    poz=CB(u[i],n);
    v[poz+1]=i;
    if(poz+1>max)
      max=poz+1;
  }
  fprintf(fo, "%d\n", max);
  afis(v[max]);
  fclose(fi);
  fclose(fo);
  return 0;
}