Cod sursa(job #1167319)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 4 aprilie 2014 19:40:29
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<cstdio>
const int N=100000;
int v[N+1];
int n,t,quest,x;
void read(){
    int i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    scanf("%d",&t);
}
void init(){
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    read();
}
int bsearch(){
    int l=1,r=n,m;
    //case 0
    if(quest==0){
        while(l<r-1){
            m=(l+r)/2;
            if(v[m]<=x)
                l=m;
            else
                r=m;
        }
        if(v[r]==x)
            return r;
        if(v[l]==x)
            return l;
        return -1;
    }
    //case 1
    if(quest==1){
        while(l<r-1){
            m=(l+r)/2;
            if(v[m]<=x)
                l=m;
            else
                r=m;
        }
        if(v[r]<=x)
            return r;
        return l;
    }
    //case2
    while(l<r-1){
        m=(l+r)/2;
        if(v[m]<x)
            l=m;
        else
            r=m;
    }
    if(v[l]>=x)
        return l;
    return r;
}
int main(){
    init();
    while(t>0){
        t--;
        scanf("%d%d",&quest,&x);
        printf("%d\n",bsearch());
    }
    return 0;
}