Cod sursa(job #760259)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 20 iunie 2012 19:13:57
Problema Cautare binara Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 2.11 kb

#include <fstream>

unsigned int search0 (const unsigned int v [ ], const unsigned int key, unsigned int begin, unsigned int end)
{
    unsigned int middle;
    while (begin <= end)
    {
        middle = (begin + end) >> 1;
        if (v[middle] <= key)
            begin = middle + 1;
        else
            end = middle - 1;
    }
    middle = (begin + end) >> 1;
    if (v[middle] > key)
        --middle;
    if (v[middle] == key)
        return middle + 1;
    return -1;
}

unsigned int search1 (const unsigned int v [ ], const unsigned int key, unsigned int begin, unsigned int end)
{
    unsigned int middle;
    while (begin < end)
    {
        middle = (begin + end) >> 1;
        if (v[middle] <= key)
            begin = middle + 1;
        else
            end = middle;
    }
    middle = (begin + end) >> 1;
    if (v[middle] > key)
        --middle;
    return middle + 1;
}

unsigned int search2 (const unsigned int v [ ], const unsigned int key, unsigned int begin, unsigned int end)
{
    unsigned int middle;
    while (begin < end)
    {
        middle = (begin + end) >> 1;
        if (v[middle] < key)
            begin = middle + 1;
        else
            end = middle;
    }
    middle = (begin + end) >> 1;
    if (v[middle] < key)
        ++middle;
    return middle + 1;
}

int main (void)
{
    unsigned int n;
    std::ifstream input("cautbin.in");
    input >> n;
    unsigned int *v(new unsigned int [n]), *it(v), *end(v + n);
    do
    {
        input >> *it;
        ++it;
    }
    while (it < end);
    --n;
    unsigned int m;
    input >> m;
    char option;
    unsigned int result, number;
    std::ofstream output("cautbin.out");
    do
    {
        input >> option >> number;
        if (option == '0')
            result = search0(v,number,0,n);
        else if (option == '1')
            result = search1(v,number,0,n);
        else
            result = search2(v,number,0,n);
        if (result == -1)
            output << "-1";
        else
            output << result;
        output.put('\n');
        --m;
    }
    while (m);
    delete [ ] v;
    input.close();
    output.close();
    return 0;
}