Cod sursa(job #1569437)

Utilizator herbertoHerbert Mohanu herberto Data 15 ianuarie 2016 16:00:50
Problema Subsir crescator maximal Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100001

int v[MAXN], p[MAXN], q[MAXN];
int main(){
  FILE*fin=fopen("scmax.in", "r");
  FILE*fout=fopen("scmax.out", "w");
  int n, i, j, mij, st, dr, max, e, poz;
  fscanf(fin, "%d", &n);
  for(i=1; i<=n; i++)
    fscanf(fin, "%d", &v[i]);

  p[1]=1;
  q[1]=1;
  j=2;
  max=0;
  for(i=2; i<=n; i++){
    if(v[i]>q[j-1]){
      q[j]=v[i];
      p[j]=j;
      j++;
      if(j>max)
        max=j;
    }
    else{
      dr=j-1;
      st=1;
      mij=(dr+st)/2;
      while(st<=dr){
        if(q[mij]>=v[i]){
          e=q[mij];
          poz=mij;
          dr=mij-1;
        }
        else
          st=mij+1;
      }
      q[poz]=v[i];
      j=i;
    }
  }
  fprintf(fout, "%d", max);
  fclose(fin);
  fclose(fout);
  return 0;
}
//sort(v, v+n, cmp);
//bool cmp(elev a, elev b){
//  if(v[a].med>v[b].med)
//      return false;
//  else
//      return true;
//}