Cod sursa(job #1697823)

Utilizator BarbumateiBarbu Matei Barbumatei Data 2 mai 2016 23:10:47
Problema Subsir crescator maximal Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.74 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=0;
  for(i=1; i<=lmax; i++){
    dr++;
    while(p[dr]!=i && dr<=n) dr++;
    q[i]=v[dr];
  }
  for(i=1; i<=lmax; i++)
    fprintf(fout, "%d ", q[i]);
  fclose(fin);
  fclose(fout);
    return 0;
}