Cod sursa(job #2283584)

Utilizator victor1306Victor Mihaila victor1306 Data 15 noiembrie 2018 17:44:21
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>



using namespace std;



ifstream cin ("cautbin.in");

ofstream cout ("cautbin.out");



const int LMAX = 100005;

const int L = 16;

int n, m, caz, x, v[LMAX];



int caut0 (int x)

{

    int r = 0, pas = 1 << L;

    while (pas != 0)

    {

        if (r + pas <= n && v[r + pas] <= x)

            r += pas;

        pas /= 2;

    }

    if (v[r] != x)

        r = -1;

    return r;

}



int caut1 (int x)

{

    int r = 0, pas = 1 << L;

    while (pas != 0)

    {

        if (r + pas <= n && v[r + pas] <= x)

            r += pas;

        pas /= 2;

    }



    return r;

}



int caut2 (int x)

{

    int r = 0, pas = 1 << L;

    while (pas != 0)

    {

        if (r + pas <= n && v[r + pas] < x)

            r += pas;



        pas /= 2;

    }

    r++;



    return r;

}



int main()

{

    cin >> n;

    for (int i = 1; i <= n; ++i)

        cin >> v[i];

    cin >> m;

    for (int t = 1; t <= m; ++t)

    {

        cin >> caz >> x;

        if (caz == 0)

            cout << caut0(x) << '\n';



        if (caz == 1)

            cout << caut1(x) << '\n';



        if (caz == 2)

            cout << caut2(x) << '\n';

    }

    return 0;

}