Cod sursa(job #1986587)

Utilizator deleted_8384d8b4ff332206DELETED deleted_8384d8b4ff332206 Data 28 mai 2017 18:04:08
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int v[100000], n;

int zero(int s, int d, int x)
{
    int mij, poz = -1;
    bool ok = 0;

    while((s <= d) && (!ok))
    {
        mij = s + (d - s)/2;

        if(x == v[mij])
        {
            poz = mij;
            ok = 1;
        }
        else if(x < v[mij])
                d = mij - 1;
            else
                s = mij + 1;
    }

    while(v[poz] == x)
        poz++;

    return poz - 1;
}

int unu(int s, int d, int x)
{
    int mij, poz = -1;
    bool ok = 0;

    while((s <= d) && (!ok))
    {
        mij = s + (d - s)/2;

        if(x <= v[mij])
        {
            poz = mij;
            ok = 1;
        }
        else
            s = mij + 1;
    }

    while(v[poz] == x)
        poz++;


    return (poz - 1);
}

int doi(int s, int d, int x)
{
    int mij, poz = -1;
    bool ok = 0;

    while((s <= d) && (!ok))
    {
        mij = s + (d - s)/2;

        if(v[mij] == x)
        {
            ok = 1;
            poz = mij;
        }
        else
            if(x < v[mij])
                d = mij - 1;
            else
                s = mij + 1;
    }

    while(v[poz] == x)
        poz--;

    return (poz + 1);
}

int main()
{
    int m, i, x, intreb;

    f >> n;

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

    f >> m;

    for(i = 0; i < m; i++)
    {
        f >> intreb >> x;

        if(intreb == 0)
            g << zero(1, n, x) << '\n';
        else if(intreb == 1)
            g << unu(1, n, x) << '\n';
            else
                g << doi(1, n, x) << '\n';
    }


    return 0;
}