Cod sursa(job #870258)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 3 februarie 2013 00:36:39
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>
int n,m,v[100002],a,b,i,x;
int cb1(int b){
    int i, step;
    for (step = 1; step < n; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step + 1< n && v[i + step + 1] <= b)
           i += step;
    return i+1;
}
int cb2(int b){
    int i, step;
    for (step = 1; step < n; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step + 1< n && v[i + step + 1] < b)
           i += step;
    return i+1;
}
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){
            x=cb1(b);
            if (v[x]!=b)x=-1;
        }
        if (a==1){
            x=cb1(b);
        }
        if (a==2){
            x=2+cb2(b);
        }
        printf("%d\n",x);
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}