Cod sursa(job #305275)

Utilizator EstiarteManuel Esanu Estiarte Data 16 aprilie 2009 20:13:42
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<stdio.h>
long int n,m,v[100003],x;
FILE *in=fopen("cautbin.in","rt");
FILE *out=fopen("cautbin.out","wt");
long int zero()
{
   long int st,dr,mij;
   while(st<=dr)
   {
      mij=dr+(st-dr)/2;
      if(x<v[mij]) dr=mij-1;
      else if(x>v[mij]) st=mij+1;
      else return mij;   
   }   
   return -1;   
}
long int unu()
{
   long int mij,st,dr,nr;
   while(st<=dr)
   {
      mij=dr+(st-dr)/2;
      if(x>=v[mij]) nr=mij,st=mij+1;
      else dr=mij-1;   
   }   
   return nr;

}
long int doi()
{
  long int st,dr,mij,nr;
  while(st<=dr)
  {
      mij=dr+(st-dr)/2;
      if(x<=v[mij]) nr=mij,dr=mij-1;
      else st=mij+1;   
   }   

 return nr;

}
int main()
{
	long int i,k;
	int opt;
	fscanf(in,"%ld",&n);
	for(i=1;i<=n;i++) fscanf(in,"%ld",&v[i]);
	fscanf(in,"%ld",&m);
	for(i=1;i<=m;i++)
	{
		 fscanf(in,"%d",&opt);
		 fscanf(in,"%ld",&x);
		 if(opt==0) k=zero();
		 if(opt==1) k=unu();
		 if(opt==2) k=doi();
                 fprintf(out,"%ld\n",k);
	}
	return 0;
}