Cod sursa(job #239370)

Utilizator zbarniZajzon Barna zbarni Data 4 ianuarie 2009 18:00:46
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<stdio.h>
int n;
int a[100005];
int bs1 (int x)
 {
  int mid,st,dr;
  for (st=1,dr=n;st<=dr;)
   {
    mid = st + (dr-st)/2;
    if (x<a[mid])
      dr=mid-1;
    else
      if (x>a[mid])
	st=mid+1;
      else
	return mid;
   }
  return 0;
 }

int bs2 (int x)
 {
  int mid,st,dr,w;
  for (st=1,dr=n;st<=dr;)
   {
    mid=st+(dr-st)/2;
    if (x<a[mid])
      dr=mid-1;
    else
      st=mid+1,w=mid;
   }
  return w;
 }

int bs3 (int x)
 {
  int mid,st,dr,w;
  for (st=1,dr=n;st<=dr;)
   {
    mid=st+(dr-st)/2;
    if (x<a[mid])
      dr=mid-1,w=mid;
    else
      st=mid+1;
   }
  return w;
 }


int main()
 {
  freopen("cautbin.in","r",stdin);
  freopen("cautbin.out","w",stdout);
  scanf("%d",&n);
  int i,m,r,c,x;
  for (i=1;i<=n;++i)
   scanf("%d",&a[i]);
  scanf("%d",&m);
  for (;m>0;--m)
   {
    scanf("%d%d",&c,&x);
    if (!c)
      {
       r=bs1(x);
       if (r)
	 printf("%d\n",r);
       else
	 printf("-1\n");
      }
    else
      if (c==1)
       printf("%d\n",bs2(x));
      else
	 printf("%d\n",bs3(x));
   }
  return 0;
 }