Cod sursa(job #1824106)

Utilizator Dupree7FMI Ciobanu Andrei Dupree7 Data 7 decembrie 2016 12:42:52
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>

using namespace std;

ifstream f("cautbin.in");
ofstream g("cautbin.out");

int n, v[100002];

int CautBin0(int x)
{
    int lo = 1, hi = n, mid;

    while(lo <= hi)
    {
        mid = lo + (hi - lo) / 2;
        if(x > v[mid])
            lo = mid + 1;
        else if(x < v[mid])
            hi = mid - 1;
        else
        {
            while(v[mid] == v[mid + 1])
                    mid++;

            return mid;
        }
    }

    return -1;
}

int CautBin1(int x)
{
    int lo = 1, hi = n, mid;

    while(lo <= hi)
    {
        mid = lo + (hi - lo) / 2;
        if(x > v[mid])
            lo = mid + 1;
        else if(x < v[mid])
            hi = mid - 1;
        else
        {
            while(v[mid] == v[mid + 1])
                    mid++;

            return mid;
        }
    }

    return hi;
}

int CautBin2(int x)
{
    int lo = 1, hi = n, mid;

    while(lo <= hi)
    {
        mid = lo + (hi - lo) / 2;
        if(x > v[mid])
            lo = mid + 1;
        else if(x < v[mid])
            hi = mid - 1;
        else
        {
            while(v[mid] == v[mid - 1])
                    mid--;

            return mid;
        }
    }

    return lo;
}

int main()
{
    int i, m, a, b;

    f >> n;
    for(i = 1; i < n + 1; i++)
        f >> v[i];
    f >> m;

    for(i = 0; i < m; i++)
    {
        f >> a >> b;

        if(a == 0)
            g << CautBin0(b) << "\n";
        else if(a == 1)
            g << CautBin1(b) << "\n";
        else
            g << CautBin2(b) << "\n";
    }

    return 0;
}