Cod sursa(job #763508)

Utilizator test666013Testez test666013 Data 2 iulie 2012 14:58:01
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAX 100001

int v[MAX],n;

int cb0(int x){
    int l = 1,r = n,m;
   // printf("%d %d\n",l,r);
    while(r-l>1)
    {
        m = (l+r)/2;
        if(v[m] <= x) l=m; else r=m-1;
       // printf("%d %d\n",l,r);
    }
    return v[r] == x ? r : v[l] == x ? l :-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 c,m,y;
    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,&y);
            switch(c){
                case 0: printf("%d\n",cb0(y)); break;
                case 1: printf("%d\n",cb1(y)); break;
                case 2: printf("%d\n",cb2(y)); break;
            }
        }
    return 0;
}