Cod sursa(job #213319)

Utilizator marinMari n marin Data 9 octombrie 2008 14:07:02
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#define DIM 100002
int V[DIM],X[DIM],P[DIM];
int n,p,u,m,i,dimX;

FILE *g = fopen("scmax.out","w");


void sol(int i){
  if (i!=0) {
    sol(P[i]);
    fprintf(g,"%d ",V[i]);
  }

}



int main(){
  FILE *f = fopen("scmax.in","r");
  fscanf(f,"%d",&n);
  for (i=1;i<=n;i++)
    fscanf(f,"%d",&V[i]);
  fclose(f);

  X[1]=1;
  dimX = 1;

  for (i=2;i<=n;i++) {
    //caut pe V[i] in x

    p=1;
    u=dimX;
    while (p<=u) {
      m = (p+u)/2;
      if (V[X[m]]<V[i]) {
	p=m+1;
      } else {
	u=m-1;
      }
    }

    if (u==dimX) {
      dimX++;
      X[dimX] = i;
      P[i] = X[dimX-1];
    } else {
      if (V[X[u+1]]>V[i]) {
	X[u+1]=i;
	P[i] = X[u];
      }
    }

  }

  fprintf(g,"%d\n",dimX);
  sol(X[dimX]);
  fclose(g);

  return 0;
}