Cod sursa(job #813177)

Utilizator andreidanAndrei Dan andreidan Data 14 noiembrie 2012 23:33:08
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>


int a[100005],n;

int ctb(int mod,int x,int st, int dr){
    int mid=(st+dr)/2;
    if(mod==0){
        if(st==dr){
            if(x==a[st]) return st;
                else return -1;
        }
        if(x>a[mid]) return ctb(0,x,mid+1,dr);
            else return ctb(0,x,st,mid);
    }
     if(mod==1){
        if(st+1==dr){
            if(x>=a[dr]) return dr;
            if(x>=a[st]) return st;
        }
        if(x>=a[mid]) return ctb(1,x,mid,dr);
        if(x<=a[mid]) return ctb(1,x,st,mid);
    }
    if(mod==2){
        if(st+1==dr){
            if(x<=a[st]) return st;
            if(x<=a[dr]) return dr;

        }
        if(x<=a[mid]) return ctb(2,x,st,mid);
        if(x>=a[mid]) return ctb(2,x,mid,dr);

    }

}

int main (){
    int i,m,x,mod;
    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(i=1;i<=m;++i){
        scanf("%d%d",&mod,&x);
        printf("%d\n",ctb(mod,x,1,n));
    }
}