Cod sursa(job #3344897)

Utilizator dummy-accdummy acc dummy-acc Data 6 martie 2026 15:06:17
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <cstdio>
using namespace std;

int v[100001];

int BSL(int st, int dr, int x) {
    int med, last = -1;
    while (st <= dr) {
        med = (st + dr) / 2;
        if (x <= v[med]) {
            last = med;
            dr = med - 1;
        } else
            st = med + 1;
    }
    return last;
}

int bsr(int st, int dr, int x) {
    int med, last = -1;
    while (st <= dr) {
        med = (st + dr) / 2;
        if (x >= v[med]) {
            last = med;
            st = med + 1;
        } else
            dr = med - 1;
    }
    return last;
}

int bs(int st, int dr, int x) {
    int med;
    while (st <= dr) {
        med = (st + dr) / 2;
        if (v[med] == x)
            return 1;
        else if (v[med] > x)
            dr = med - 1;
        else
            st = med + 1;
    }
    return 0;
}

int main() {
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);

    int n, i, m, q, a;
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
        scanf("%d", &v[i]);
    scanf("%d", &m);
    for (i = 1; i <= m; i++) {
        scanf("%d%d", &q, &a);
        if (q == 0) {
            if (bs(1, n, a))
                printf("%d\n", bsr(1, n, a));
            else
                printf("-1\n");
        } else if (q == 1)
            printf("%d\n", bsr(1, n, a));
        else
            printf("%d\n", BSL(1, n, a));
    }
    return 0;
}