Cod sursa(job #256670)

Utilizator drag0shSandulescu Dragos drag0sh Data 11 februarie 2009 23:38:54
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>

#define in "cautbin.in"
#define out "cautbin.out"

FILE *f=fopen(in,"r"),*g=fopen(out,"w");
int n,v[100001];

int main(){
  int i,m,select,x,step;
  fscanf(f,"%d",&n);
  for(i=0;i<n;i++)fscanf(f,"%d",&v[i]);
  fscanf(f,"%d",&m);
  for(;m;m--){
    
    fscanf(f,"%d%d",&select,&x);
    if(select<2){
      for(step=1;step<n;step<<=1);
      for(i=0;step;step>>=1)
	if(i+step<n&&v[i+step]<=x)
	  i+=step;
      if(!select&&v[i]!=x)fprintf(g,"-1\n");
      else fprintf(g,"%d\n",i+1);
    
    }
    
    else{
      for(step=1;step<n;step<<=1);
      for(i=n-1;step;step>>=1)
	if(i-step>=0&&v[i-step]>=x)
	  i-=step;
      fprintf(g,"%d\n",i+1);
    }
    
  }



  
  fclose(f);
  fclose(g);
  return 0;
}