Cod sursa(job #870264)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 3 februarie 2013 00:43:45
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<stdio.h>
int n,m,v[100002],a,b,st,dr,mij,r,i,x;
int cb1(int b){
    int st,dr,mij;
    st=1;dr=n;
    while(st<=dr){
        mij=st+(dr-st)/2;
        if (b<v[mij])dr=mij-1;
        else st=mij+1;
    }
    return dr;
}
int cb2(int b){
    int st,dr,mij;
    st=1;dr=n;
    while(st<=dr){
        mij=st+(dr-st)/2;
        if (b<=v[mij])dr=mij-1;
        else st=mij+1;
    }
    return dr;
}
int main(){
    freopen("cautbin.in","rt",stdin);
    freopen("cautbin.out","wt",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;i++){
        scanf("%d",v+i);
    }
    scanf("%d",&m);
    for (i=1;i<=m;i++){
        scanf("%d%d",&a,&b);
        //cautarea binara
        //afisarea rezultatului
        if (a==0){
            dr=cb1(b);
            if (v[dr]==b)x=dr;
            else x=-1;
        }
        if (a==1){
            x=cb1(b);
        }
        if (a==2){
            x=1+cb2(b);
        }
        printf("%d\n",x);
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}