Cod sursa(job #256233)

Utilizator n3msizN3msiz n3msiz Data 11 februarie 2009 13:14:51
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
# include <stdio.h>

int i,n,p,u,m,v[100],x,M,tip,max,j,ok,min;

int main() {

  FILE *f = fopen("cautbin.in","r");
  FILE *g = fopen("cautbin.out","w");

  fscanf(f,"%d",&n);

  for (i=1;i<=n;i++)
    fscanf(f,"%d",&v[i]);

  fscanf(f,"%d",&M);

  for (i=1;i<=M;i++) {

    fscanf(f,"%d",&tip);
    fscanf(f,"%d",&x);

    if (tip==0) {
      p=1;
      u=n;
      while (p<=u) {
	m=(p+u)/2;
	if (x==v[m])
	  ok=1;
	if (x>=v[m])
	  p=m+1;
	else
	  u=m-1;
      }
      if (ok==1)
	fprintf(g,"%d\n",u);
      else
	fprintf(g,"-1\n");
    }

    if (tip==1) {
      max=v[1];
      for (j=1;j<=n;j++)
	if ((v[j]>max)&&(v[j]<x))
	  max=v[j];
      p=1;
      u=n;
      while (p<=u) {
	m=(p+u)/2;
	if (max>=v[m])
	  p=m+1;
	else
	  u=m-1;
      }
      fprintf(g,"%d\n",u);
    }

    if (tip==2) {
      min=v[n];
      for (j=1;j<=n;j++)
	if ((v[j]<min)&&(v[j]>=x))
	  min=v[j];
      p=1;
      u=n;
      while (p<=u) {
	m=(p+u)/2;
	if (min>=v[m])
	  p=m+1;
	else
	  u=m-1;
      }
      fprintf(g,"%d\n",u);
    }
  }

  fclose(f);
  fclose(g);

  return 0;
}