Cod sursa(job #759189)

Utilizator test13test13 test13 Data 17 iunie 2012 00:16:36
Problema Cautare binara Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#define MAX 100001

int n,v[MAX];

int cb0(int x){
    int l=1,r=n,m;
    while(l<r)
    {
        m=(l+r)/2;
        if(v[m]>x)r=m; else l=m+1;
    }
    return v[r-1]==x?r-1:-1;
}

int cb1(int x){
    int l=1,r=n,m;
    while(r-l>1)
    {
        m=(l+r)/2;
        if(v[m]>x)r=m-1; else l=m;
    }
    return v[r]<=x?r:l;
}

int cb2(int x){
    int l=1,r=n,m;
    while(r-l>1)
    {
        m=(l+r)/2;
        if(v[m]<x)l=m+1; else r=m;
    }
    return v[l]>=x?l:r;
}

int main(){
    int m,c,x;
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&v[i]);
        scanf("%d",&m);
        while(m--)
        {
            scanf("%d %d",&c,&x);
            switch(c)
            {
                case 0 : printf("%d\n",cb0(x)); break;
                case 1 : printf("%d\n",cb1(x)); break;
                case 2 : printf("%d\n",cb2(x)); break;
            }
        }
    return 0;
}