Cod sursa(job #3324402)

Utilizator Ana_Maria_2007Andreescu Ana-Maria Ana_Maria_2007 Data 22 noiembrie 2025 10:40:42
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.7 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 100000;

int v[NMAX + 5];
int n, m;

int bsearch0(int x) {
    int st = 0, dr = n - 1;
    int poz = -1;

    while (st <= dr) {
        int mid = st + (dr - st) / 2;
        if (v[mid] == x) {
            poz = mid;
            st = mid + 1;
        } else if (v[mid] < x) {
            st = mid + 1;
        } else {
            dr = mid - 1;
        }
    }

    return poz;
}

int bsearch1(int x) {
    int st = 0, dr = n - 1;
    int poz = -1;

    while (st <= dr) {
        int mid = st + (dr - st) / 2;
        if (v[mid] <= x) {
            poz = mid;
            st = mid + 1;
        } else {
            dr = mid - 1;
        }
    }

    return poz;
}

int bsearch2(int x) {
    int st = 0, dr = n - 1;
    int poz = -1;

    while (st <= dr) {
        int mid = st + (dr - st) / 2;
        if (v[mid] >= x) {
            poz = mid;
            dr = mid - 1;
        } else {
            st = mid + 1;
        }
    }

    return poz;
}

int main() {
    ifstream fin("cautbin.in");
    ofstream fout("cautbin.out");

    fin >> n;
    for (int i = 0; i < n; i++)
        fin >> v[i];

    fin >> m;
    for (int i = 0; i < m; i++) {
        int c, x;
        fin >> c >> x;

        if (c == 0) {
            int poz = bsearch0(x);
            if (poz == -1)
                fout << -1 << '\n';
            else
                fout << poz + 1 << '\n';
        } else if (c == 1) {
            int poz = bsearch1(x);
            fout << poz + 1 << '\n';
        } else {
            int poz = bsearch2(x);
            fout << poz + 1 << '\n';
        }
    }

    return 0;
}