Cod sursa(job #206001)

Utilizator socheoSorodoc Ionut socheo Data 3 septembrie 2008 23:05:37
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>
int a[100001],i,j,n,st,dr,nr,q,t;
int cauta(int st1 ,int dr1)
{ int  mij=st1+(dr1-st1)/2;
  if(a[mij]==nr) return mij;
  if(st1<=dr1)
  {if(nr<a[mij])
   return cauta(st1,mij-1);
   if(nr>a[mij])
    return cauta(mij+1,dr1);    }
  return mij;   }
int main()
{ freopen("cautbin.in","r",stdin);
  freopen("cautbin.out","w",stdout);
  scanf("%d",&n);
  for(i=1;i<=n;i++)
   scanf("%d",&a[i]);
  scanf("%d",&t);
  for(i=1;i<=t;i++)
  { scanf("%d%d",&q,&nr);
   dr=n;
    int u=cauta(1,dr);
    if(a[u]==nr)
      printf("%d\n",u);
    else
    { j=u;
    if(q==0) printf("-1\n");
      if(q==1) {while(a[j]==a[u])
                   u--;
      printf("%d\n",u-1); }
      if(q==2){  while(a[j]==a[u]
                 u++;
      printf("%d\n",u);}
      }
      }
return 0;}