Cod sursa(job #313243)

Utilizator cristikIvan Cristian cristik Data 8 mai 2009 14:35:57
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
int n,a[100100],op,m,x,k;
int bs(int x)
{
    int i,step;
    for(step=1; step<=n; step<<=1);
    for(i=0; step; step>>=1)
     if(i+step<=n && a[i+step]<=x) i+=step;
    return i;
}
int bs1(int x)
{
    int i,step;
    for(step=1; step<=n; step<<=1);
    for(i=n; step; step>>=1)
     if(i-step>0 && a[i-step]>=x) i-=step;
    return i;
}
int main()
{
    int i,j;
    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",&m);
    for(j=1; j<=m; j++)
    {
        scanf("%d %d",&op,&x);
        if(op==0)
        {
            k=bs(x);
            if(a[k]!=x) printf("-1\n");
            else printf("%d\n",k);
        }
        if(op==1) printf("%d\n",bs(x));
        if(op==2) printf("%d\n",bs1(x));
    }
    return 0;
}