Cod sursa(job #3123456)

Utilizator radustn92Radu Stancu radustn92 Data 23 aprilie 2023 20:13:48
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;

int N, M;
vector<int> numbers;

int lBound(int x) {
    // no[left] <= x < no[right]
    int left = -1, right = N;
    while (right - left > 1) {
        int mid = left + (right - left) / 2;
        if (numbers[mid] <= x) {
            left = mid;
        } else {
            right = mid;
        }
    }
    return left;
}

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

    cin >> N;
    numbers.assign(N, 0);
    for (int idx = 0; idx < N; idx++) {
        cin >> numbers[idx];
    }
    cin >> M;
    int type, x;
    for (int query = 0; query < M; query++) {
        cin >> type >> x;
        if (type == 0) {
            int lb = lBound(x);
            int result = (lb >= 0 && numbers[lb] == x) ? lb + 1 : -1;
            cout << result << "\n";
        } else if (type == 1) {
            cout << lBound(x) + 1 << "\n";
        } else {
            cout << lBound(x - 1) + 2 << "\n";
        }
    }
    return 0;
}