Cod sursa(job #2908568)

Utilizator AswVwsACamburu Luca AswVwsA Data 4 iunie 2022 13:36:23
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
#define ll long long
using namespace std;

int v[100003];
const int LGMAX = 65536; //LG, ca la televizoare
int main()
{
    ifstream cin("cautbin.in");
    ofstream cout("cautbin.out");
    int n, i;
    cin >> n;
    for (i = 1; i <= n; i++)
        cin >> v[i];
    int q;
    cin >> q;
    while (q--)
    {
        int op, x;
        cin >> op >> x;
        if (op == 0)
        {
            int ans = 0, pas = LGMAX;
            while (pas)
            {
                if (ans + pas <= n and v[ans + pas] <= x)
                    ans += pas;
                pas >>= 1;
            }
            if (v[ans] == x)
                cout << ans;
            else
                cout << "-1";
            cout << "\n";
        }
        else if (op == 1)
        {
            int ans = 0, pas = LGMAX;
            while (pas)
            {
                if (ans + pas <= n and v[ans + pas] <= x)
                    ans += pas;
                pas >>= 1;
            }
            cout << ans << "\n";
        }
        else if (op == 2)
        {
            int ans = 0, pas = LGMAX;
            while (pas)
            {
                if (ans + pas <= n and v[ans + pas] < x)
                    ans += pas;
                pas >>= 1;
            }
            ans++;
            cout << ans << "\n";
        }
    }
}