/* 昇順の配列 a[l..r] からxを二分探索する */
int bsearch(int a[], int left, int right, int x)
{
   int mid;

   if (left > right) return -1;
   mid = (left + right) / 2;
   if (a[mid] == x) 
      return mid;
   else if (x < a[mid])
      return bsearch(a, left, mid-1, x);
   else 
      return bsearch(a, mid+1, right, x);
}
