Cod sursa(job #2786542)

Utilizator AlexNicuNicu Alexandru AlexNicu Data 21 octombrie 2021 10:01:47
Problema Cautare binara Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>

using namespace std;

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

#define NMAX 100000

int v[NMAX];

int main() {
    int n, i, p2, q, op, x, pas, st;
    cin >> n;
    for ( i = 0; i < n; i++ ) {
        cin >> v[i];
    }
    cin >> q;
    p2 = 1 << 17;
    for ( i = 1; i <= q; i++ ) {
        cin >> op >> x;
        pas = p2;
        st = 0;
        if ( op == 0 ) {
            for (; pas; pas >>= 1) {
                if ( st + pas <= n && v[st + pas] <= x) {
                    st += pas;
                }
            }
            if ( v[st] == x )
                cout << st + 1 << "\n";
            else
                cout << "-1\n";
        } else if ( op == 1 ) {
            for (; pas; pas >>= 1) {
                if (st + pas <= n && v[st + pas] <= x) {
                    st += pas;
                }
            }
            cout << st + 1 << "\n";
        } else {
            for (; pas; pas >>= 1) {
                if (st + pas <= n && v[st + pas] < x) {
                    st += pas;
                }
            }
            if ( v[st] >= x ) {
                cout << st + 1 << "\n";
            } else
                cout << st + 2 << "\n";
        }
    }
    return 0;
}