Cod sursa(job #2847680)

Utilizator raulandreipopRaul-Andrei Pop raulandreipop Data 11 februarie 2022 11:23:12
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>

using namespace std;

ifstream cin ("cautbin.in");
ofstream cout ("cautbin.out");

int a[100100];

int main ()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    int q;
    cin >> q;
    int p2 = 1;
 
    while (p2 <= n)
    {
        p2 <<= 1;
    }
    p2 >>= 1;
    while (q--)
    {
        int o, x;
        cin >> o >> x;
        if (o == 0)
        {
            int rez = 0;
            for (int pas = p2; pas > 0; pas >>= 1)
            {
                if (rez + pas <= n && a[rez + pas] <= x)
                {
                    rez += pas;
                }
            }
            if (a[rez] == x) cout << rez << '\n';
            else cout << -1 << '\n';
        }
        else if (o == 1)
        {
            int rez = 0;
            for (int pas = p2; pas > 0; pas >>= 1)
            {
                if (rez + pas <= n && a[rez + pas] <= x) rez += pas;
            }
            cout << rez << '\n';
        }
        else if (o == 2)
        {
            int rez = 0;
            for (int pas = p2; pas > 0; pas >>= 1)
            {
                if (rez + pas <= n && a[rez + pas] < x) rez += pas;
            }
            cout << rez + 1 << '\n';
        }
    }
}