Cod sursa(job #370438)

Utilizator GotenAmza Catalin Goten Data 1 decembrie 2009 12:10:27
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream.h>

long l,r,m,i,n,a[101],gasit,x,op;

int main()
{
 ifstream f("cautbin.in");
 ofstream g("cautbin.out");
 f>>n;
 for(i=1;i<=n;i++)f>>a[i];
 f>>m;
 for(i=1;i<=m;i++)
 {
  f>>op>>x;
  if(!op)
   {
    l=1;r=n;gasit=0;
    while(l<=r&&!gasit)
     { 
      m=l+((r-l)>>1);
      if(a[m]==x)gasit=1;
      else if(a[m]>x) r=m-1;
      else l=m+1;
      }
    if(!gasit)g<<"-1";
    else
     {
      while(a[m]==x)m++;
      g<<m-1<<'\n';
      }
    }
  else if(op==1)
	{
	 l=1;r=n;
	 while(l<r)
	 {
	  m=l+((r-l)>>1);
	  if(a[m]<=x)l=m+1;
	  else r=m-1;
	  }
	while(a[m]>x)m--;
	g<<m<<'\n';
	}
       else
	{
	 l=1;r=n;
	 while(l<=r)
	 {
	  m=l+((r-l)>>1);
	  if(a[m]>=x)r=m-1;
	  else m=l+1;
	  }
	 while(a[m]<x)m++;;
	 g<<m<<'\n';
	 }
   }
 return 0;
 }