Cod sursa(job #1339791)

Utilizator mihai.constantinConstantin Mihai mihai.constantin Data 11 februarie 2015 10:19:03
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <cstdio>
#define Dmax 100100
using namespace std;

int v[Dmax]; int N,M;

int CAUTARE_0(int y)
{
    int i,j,m;
    i=1; j=N;
    while(i<=j)
    {
        m=(i+j)/2;
        if(v[m]<=y) i=m+1;
            else j=m-1;
    }
    m=(i+j)/2;

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

int CAUTARE_1(int y)
{
    int i,j,m;
    i=1; j=N;
    while(i<j)
    {
        m=(i+j)/2;
        if(y>=v[m]) i=m+1;
            else j=m;
    }
    m=(i+j)/2;
    if(v[m]>y) m--;
    return m;
}

int CAUTARE_2(int y)
{
    int i,j,m;
    i=1; j=N;
    while(i<j)
    {
        m=(i+j)/2;
        if(y>v[m]) i=m+1;
                else j=m;
    }
    m-(i+j)/2;
    if(v[m]<y) m++;
    return m;
}

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

    int i,j,k,x,m;

    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", &k, &x);
        switch(k)
        {
            case 0:
                { printf("%d",CAUTARE_0(x)); }break;
            case 1:
                { printf("%d",CAUTARE_1(x)); }break;
            case 2:
                { printf("%d",CAUTARE_2(x));}break;
        }
        printf("\n");
    }

    return 0;
}