Cod sursa(job #212908)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 7 octombrie 2008 19:59:15
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<stdio.h>
int a[100005],n,i,m,f,r,x,pas,p;
/*long cauta(long st,long dr,long x)
{long i,pas;
 for(pas=1;pas<dr;pas<<=1);
 for(i=0;pas;pas>>=1)
    if(i+pas<=dr&&a[i+pas]<=x)i+=pas;
 return i;
} */
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]);
// a[i]=2000000000;
 scanf("%d",&m);
 for(pas=1;pas<=n;pas<<=1);
 for(i=m;i>0;--i)
    {scanf("%d%d",&f,&x);
     if(f<=1)
       {
        for(p=pas,r=0;p;p>>=1)
           if(r+p<=n&&a[r+p]<=x)r+=p;
        if(f==0&&a[r]!=x)r=-1;
        printf("%d\n",r);
       }
      else
       {
        for(p=pas,r=n;p;p>>=1)
           if(r-p>0&&a[r-p]>=x)r-=p;
        printf("%d\n",r);
       }
    }
 return 0;
}