Cod sursa(job #883533)

Utilizator roparexRoparex roparex Data 20 februarie 2013 08:52:50
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<cstdio>
int n,a[101],m;
int cautbin(int imin,int imax,int k,int x)
{
    int imid=(imin+imax)/2;
    if(x==0)
    {
        if(a[imid]>k) return cautbin(imid,imax,k,x);
        if(a[imid]<k) return cautbin(imin,imid,k,x);
        if(a[imid]==k) {if(a[imid+1]>k){if(imid>0) return imid; else return -1;}else return cautbin(imid+1,imax,k,x);}
    }
    if(x==1)
    {
        if(a[imid]>k) return cautbin(imin,imid-1,k,x);
        if(a[imid]<=k) {if(a[imid+1]>k) return imid; else cautbin(imid+1,imax,k,x);}
    }
}
int main()
{
    int x,k,i;
    freopen("cautbin.in","rt",stdin);
    freopen("cautbin.out","wt",stdout);
    scanf("%ld",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%ld",&a[i]);
    }
    scanf("%ld",&m);
    for(i=1;i<=m;i++)
    {
        scanf("%ld%ld",&x,&k);
        printf("%ld\n",cautbin(1,n,k,x));
    }
    return 0;
}