Cod sursa(job #513706)

Utilizator b_polarAgape Mihai b_polar Data 16 decembrie 2010 18:44:08
Problema Cautare binara Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
#define dim 100010

int n,v[dim];

int cbin0(int nr)
{
    int ret=-2,s=0,d=n-1;
    while(s<=d)
    {
        int m=(s+d)>>1;
        if(v[m]==nr)ret=m;
        if(v[m]<=nr)s=m+1;
        else d=m-1;
    }
    return ret+1;
}

int cbin1(int nr)
{
    int ret=-2,s=0,d=n-1;
    while(s<=d)
    {
        int m=(s+d)>>1;
        if(v[m]<=nr)ret=m,s=m+1;
        else d=m-1;
    }
    return ret+1;
}

int cbin2(int nr)
{
    int ret=-2,s=0,d=n-1;
    while(s<=d)
    {
        int m=(s+d)>>1;
        if(v[m]<nr)s=m+1;
        else ret=m,d=m-1;
    }
    return ret+1;
}

int main()
{
    int teste,tip,valoare,i;

    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);

    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&v[i]);
    scanf("%d",&teste);

    for(i=1;i<=teste;i++)
        scanf("%d %d",&tip,&valoare),
        printf("%d\n",(tip?tip-1?cbin2(valoare):cbin1(valoare):cbin0(valoare)));

    return 0;
}