Cod sursa(job #366361)

Utilizator Cristi09Cristi Cristi09 Data 21 noiembrie 2009 17:05:41
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
long n,m,lo,hi,mid,last,a[100000],cer,x;
long cauta();
void cerinta();
int main()
{
   FILE*f=fopen("cautbin.in","r");
   fscanf(f,"%d",&n);
   int i=0;
   for(i;i<n;++i)
   fscanf(f,"%d",&a[i]);

   fscanf(f,"%d",&m);
   FILE*g=fopen("cautbin.out","w");
   for(;m;m--)
   {
	  fscanf(f,"%d%d",&cer,&x);
	  fprintf(g,"%d\n",cauta());
   }
   fclose(f);
   fclose(g);
   return 0;
}
long cauta()
{
	lo=0;
	hi=n;
	last=-2;
	while(lo<=hi)
	{
	   mid=lo+(hi-lo)/2;
	   cerinta();
	}
	return last+1;
}
void cerinta()
{
   switch(cer)
   {
	  case 0:
	  {
		 if(a[mid]<=x){if(a[mid]==x)last=mid;lo=mid+1;}
		 else hi=mid-1;
		 break;
	  }
	  case 1:
	  {
		 if(a[mid]<=x){last=mid;lo=mid+1;}
		 else hi=mid-1;
		 break;
	  }
	  case 2:
	  {
		 if(a[mid]>=x){last=mid;hi=mid-1;}
		 else lo=mid+1;
		 break;
	  }
   }
}