Cod sursa(job #921950)

Utilizator FayedStratulat Alexandru Fayed Data 21 martie 2013 20:45:01
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#define NMAX 100001

int V[NMAX];
int n,step,m,log;

int main(){

    int cod,i,x;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    scanf("%d",&n);
    for(register int i=1;i<=n;++i)
        scanf("%d",&V[i]);
    scanf("%d",&m);
    while(m){

        scanf("%d",&cod);
        if(cod < 2){
        scanf("%d",&x);
        for(log = 1;log<=n;log<<=1)
            for(i=0,step=log;step;step>>=1)
                if(i+step <=n && V[i+step] <=x)
                    i+=step;
               if(!cod && V[i]!=x)
                        printf("-1\n");
                        else printf("%d\n",i);
        }
        else{
            scanf("%d",&x);
        for(log = 1;log<=n;log<<=1)
            for(i=n,step=log;step;step>>=1)
                if(i-step > 0 && V[i-step] >=x)
                    i-=step;
        printf("%d\n",i);
        }
    --m;
    }
return 0;
}