Cod sursa(job #2795248)

Utilizator domistnSatnoianu Dominic Ioan domistn Data 6 noiembrie 2021 10:06:33
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>

using namespace std;

const int NMAX = 100000;

int n, m, p = 1, a[NMAX + 1];

int main()
{
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
    scanf("%d", &n);
    while(p < n) p <<= 1;
    for(int i = 1; i <= n; ++i) {
        scanf("%d", &a[i]);
    }
    scanf("%d", &m);
    while(m--) {
        int op, x;
        scanf("%d%d", &op, &x);
        if(op == 0) {
            int i = -1, l;
            for(i = 0, l = p; l; l >>= 1)
                if(i + l <= n && a[i + l] <= x) i += l;
            if(a[i] == x) printf("%d\n", i);
            else printf("-1\n");
        } else if(op == 1) {
            int i = -1, l;
            for(i = 1, l = p; l; l >>= 1)
                if(i + l <= n && a[i + l] <= x) i += l;
            printf("%d\n", i);
        } else {
            int i = -1, l;
            for(i = n, l = p; l; l >>= 1)
                if(i - l >= 1 && a[i - l] >= x) i -= l;
            printf("%d\n", i);
        }
    }
    return 0;
}