Cod sursa(job #886418)

Utilizator raulmuresanRaul Muresan raulmuresan Data 22 februarie 2013 20:40:53
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <cstdio>

using namespace std;
int i,aux,n,b,k,j,p,v[2500],m,s,tip,nr,x;

int cautare0 (int p, int u, int key) {
    int m;

    while (p <= u) {
        m = (p + u) / 2;
        if (v[m] <= key)
            p = m + 1;
        else
            u = m - 1;
    }
    m = (p + u) / 2;

    if (v[m] > key) m --;
    if (v[m] == key)
        return m;
    return -1;
}

int cautare1 (int p, int u, int key) {
    int m, n = u;

    while (p < u){
        m = (p + u) / 2;
        if (v[m] <= key)
            p = m + 1;
        else
            u = m;
    }

    m = (p + u) / 2;
    if (v[m] > key)
       -- m;
    return m;
}

int cautare2 (int p, int u, int key) {
    int m;

    while (p < u) {
        m = (p + u) / 2;
        if (v[m] < key)
            p = m + 1;
        else
            u = m;
    }

    m = (p + u) / 2;
    if (v[m] < key)
       ++ m;
    return m;
}


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

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

    scanf("%d",&m);

    for(i=1;i<=m;i++)
    {
        scanf("%d %d ",&tip,&nr);
        if(tip==0)
        {
            x=cautare0(1,n,nr);

        }
        else
        {
            if(tip==1)
            x=cautare1(1,n,nr);
            else x=cautare2(1,n,nr);
        }
        printf("%d\n",x);
    }

}