Cod sursa(job #210959)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 29 septembrie 2008 23:34:34
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<stdio.h>
int n,m,x,a[100001];
int bin(int n,int x){
    int st,dr,k;
    st=1;
    dr=n;
    while(st<dr){
        k=(st+dr)/2;
        if(a[k]<x)
            st=k+1;
        else
            dr=k;}
    return st;}
void solve(){
    int i,q,poz,k;
    scanf("%d",&n);
    for(i=1; i<=n; ++i)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    for(i=1; i<=m; ++i){
        scanf("%d%d",&q,&x);
        poz=bin(n,x);
        if(q==0)
            if(a[poz]==x)
                printf("%d\n",poz);
            else
                printf("-1\n");
        if(q==1)
            if(a[poz]==x)
                printf("%d\n",poz-1);
            else{
                while(a[poz]>x)
                    --poz;
                printf("%d\n",poz);}
        if(q==2)
            if(a[poz]==x)
                printf("%d\n",poz+1);
            else{
                while(a[poz]<x)
                    ++poz;
                printf("%d\n",poz);}}}
int main(){
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    solve();
    return 0;}