Cod sursa(job #255898)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 10 februarie 2009 20:45:16
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include<stdio.h>
#define DIM 100001
int n,a[DIM];
int q0 (int x)
{
    int st=1,dr=n,mi;
    while(st<=dr)
    {
        mi=(st+dr)/2;
        if(a[mi]==x)
        {
            while(a[mi]==x)
            ++mi;
            return --mi;
        }
        if(a[mi]<x)
        dr=--mi;
        if(a[mi]>x)
        st=++mi;
    }
    return -1;
}
int q1 (int x)
{
    int st=1,dr=n,mi;
    while(st<=dr)
    {
        mi=(st+dr)/2;
        if(a[mi]==x)
        return mi;
        if(a[mi]<x)
        dr=--mi;
        if(a[mi]>x)
        st=++mi;
    }
    q1(--x);
    return mi;
}
int q2 (int x)
{
    int st=1,dr=n,mi;
    while(st<=dr)
    {
        mi=(st+dr)/2;
        if(a[mi]==x)
        return mi;
        if(a[mi]<x)
        dr=--mi;
        if(a[mi]>x)
        st=++mi;
    }
    q2(++x);
    return mi;
}
int main ()
{
    freopen("cautbin.in","r",stdin);
    freopen("cautbin.out","w",stdout);
    int i,m,x,q;
    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);
        if(q==0)
        printf("%d\n",q0(x));
        if(q==1)
        printf("%d\n",q1(x));
        if(q==2)
        printf("%d\n",q2(x));
    }
return 0;
}