Cod sursa(job #207106)

Utilizator socheoSorodoc Ionut socheo Data 11 septembrie 2008 18:48:38
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>
int x,a[140001],i,j,n,st,dr,nr,q,t,m;
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++)
  {  if(i==14502) { x=nr; m=q;}
    scanf("%d%d",&q,&nr);
     dr=n;
    int u=cauta(1,dr);
    if(a[u]==nr)
      printf("%d\n",u);

    else
    {
    if(q==0) printf("-1\n");
     if(q==1)
      printf("%d\n",u-1);
    if(q==2)
     { while(a[u]==a[u-1]&&u>0&&u<=n)
         u--;
     printf("%d\n",u);
      }
      }
      }
return 0;}