Cod sursa(job #1697720)

Utilizator BarbumateiBarbu Matei Barbumatei Data 2 mai 2016 19:18:01
Problema Subsir crescator maximal Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
#include <stdlib.h>
int v[100001], q[100001], p[100001], lmax;
int main(){
  int n, i, st, dr, mij;
  FILE *fin, *fout;
  fin=fopen("scmax.in", "r");
  fout=fopen("scmax.out", "w");
  fscanf(fin, "%d", &n);
  for(i=1; i<=n; i++){
    fscanf(fin, "%d", &v[i]);
    st=1; dr=lmax;
    while(st<=dr){
      mij=(st+dr)/2;
      if(v[i]<q[mij]) dr=mij-1;
      else st=mij+1;
    }
    if(q[st-1]!=v[i]){
      lmax+=(st>lmax);
      q[st]=v[i];
      p[i]=st;
    }
  }
  fprintf(fout, "%d\n", lmax);
  dr=1;
  for(i=1; i<=lmax; i++){
    while(p[dr]!=i) dr++;
    q[i]=v[dr];
  }
  for(i=1; i<=lmax; i++)
    fprintf(fout, "%d ", q[i]);
  fclose(fin);
  fclose(fout);
    return 0;
}