Cod sursa(job #781329)

Utilizator my666013Test Here my666013 Data 24 august 2012 10:33:20
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <cstdio>
//#include "dbg.h"
#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] == x ? r : 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)l = m; else r = m-1;
    }
    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)r = m; else l = m+1;
    }
    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;
            }
        }

    fclose(stdin);
    fclose(stdout);

    //ok();

    return 0;
}