Cod sursa(job #269373)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 2 martie 2009 20:35:38
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#define dim 100001
long v[dim], n, q, i, type, x, m;

void cb1(long), cb2(long), cb3(long);
void read(void)
{
 freopen("cautbin.in","r",stdin);
 freopen("cautbin.out","w",stdout);
 scanf("%ld", &n);
 for( register int i = 1; i <= n; i++)
  scanf("%ld",&v[i]);
 scanf("%ld",&q);
}
int main(void)
{
 read();
 for( i = 1; i <= q; i++)
 {
  scanf("%ld%ld",&type, &x);
  switch(type)
  {
	case 0 : cb1(x); break;
	case 1 : cb2(x); break;
	case 2 : cb3(x); break;
  }
 }

 fcloseall();
 return 0;
}

void cb1(long x)
{
 long poz = -1, l = 1 , r = n;
 while(l <= r)
 {
  m = (l+r)/2;
	if(v[m] == x)
	 {
	  poz = m;
	  l = m+1;
	 }
	else
	 if(v[m] < x)
	  l = m+1;
	 else
	  r = m-1;
  }

  printf("%ld\n",poz);
}
void cb2(long x)
{
	long poz = -1, l = 1 , r = n;
	while(l <= r)
	{
	 m = (l+r)/2;
	 if(v[m] <= x)
	  {
		poz = m;
		l = m+1;
	  }
	 else
		r = m-1;
	}

	printf("%ld\n",poz);
}
void cb3(long x)
{
  long poz = -1, l = 1 , r = n;
  while(l <= r)
  {
	m = (l+r)/2;
	if(v[m] >= x)
	 {
	  poz = m;
	  r = m-1;
	 }
	else
	 l = m+1;
  }
  printf("%ld\n",poz);
}