Cod sursa(job #1139589)

Utilizator radarobertRada Robert Gabriel radarobert Data 11 martie 2014 12:05:22
Problema Cautare binara Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>

using namespace std;

int x, v[1000];

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

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

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

int main()
{int i, n, m, tip;
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");
    in >> n;
    for (i = 1; i <= n; ++i)
        in >> v[i];
    in >> m;
    while (m--)
    {
        in >> tip >> x;
        if (tip == 0)
            out << caut0(1, n) << '\n';
        if (tip == 1)
            out << caut1(1, n) << '\n';
        if (tip == 2)
            out << caut2(1, n) << '\n';
    }

    return 0;
}