Cod sursa(job #1889513)

Utilizator Burbon13Burbon13 Burbon13 Data 22 februarie 2017 19:11:49
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include <cstdio>

using namespace std;

const int nmx = 100002;

int n,v[nmx];

void citire()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i)
        scanf("%d", &v[i]);
}

void cautbin0(int nr)
{
    int st = 1, dr = n, pos = -1;

    while(st <= dr)
    {
        int mij = (st + dr) / 2;

        if(v[mij] == nr)
        {
            pos = mij;
        }
        if(v[mij] <= nr)
            st = mij + 1;
        else
            dr = mij - 1;

    }

    printf("%d\n", pos);
}

void cautbin1(int nr)
{
    int st = 1, dr = n, pos = -1;

    while(st <= dr)
    {
        int mij = (st + dr) / 2;

        if(v[mij] <= nr)
        {
            pos = mij;
        }
        if(v[mij] <= nr)
            st = mij + 1;
        else
            dr = mij - 1;

    }

    printf("%d\n", pos);
}

void cautbin2(int nr)
{
    int st = 1, dr = n, pos = -1;

    while(st <= dr)
    {
        int mij = (st + dr) / 2;

        if(v[mij] >= nr)
        {
            pos = mij;
        }
        if(v[mij] >= nr)
            dr = mij - 1;
        else
            st = mij + 1;

    }

    printf("%d\n", pos);
}

void teste()
{
    int nr;
    scanf("%d", &nr);
    while(nr--)
    {
        int c,x;
        scanf("%d %d", &c, &x);
        if(c == 0)
            cautbin0(x);
        else if(c == 1)
            cautbin1(x);
        else
            cautbin2(x);
    }
}

int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    citire();
    teste();
    return 0;
}