Cod sursa(job #3245612)

Utilizator MikeStrikeAgache Mihai MikeStrike Data 29 septembrie 2024 18:26:43
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.65 kb
#include <iostream>
#include <fstream>
using namespace std;

#define N 100010
int v[N];

int bsearch0(int left, int right, int value) {
    int middle;
    while (left <= right) {
        middle = (left + right) / 2;
        if (v[middle] <= value)
            left = middle + 1;
        else
            right = middle - 1;
    }
    middle = (left + right) / 2;
    if (v[middle] > value) middle--;
    if (v[middle] == value)
        return middle;
    return -1;
}

int bsearch1(int left, int right, int value) {
    int middle;
    while (left < right) {
        middle = (left + right) / 2;
        if (v[middle] <= value)
            left = middle + 1;
        else
            right = middle;
    }
    middle = (left + right) / 2;
    if (v[middle] > value)
        middle--;
    return middle;
}

int bsearch2(int left, int right, int value) {
    int middle;
    while (left < right) {
        middle = (left + right) / 2;
        if (v[middle] < value)
            left = middle + 1;
        else
            right = middle;
    }
    middle = (left + right) / 2;
    if (v[middle] < value)
        middle++;
    return middle;
}

int main() {
    int i, n, m, tip, val;
    
    ifstream in("cautbin.in");
    ofstream out("cautbin.out");

    in >> n;
    for (i = 1; i <= n; ++i)
        cin >> v[i];

    in >> m;

    while (m--) {
        in >> tip >> val;
        if (tip == 0)
            out << bsearch0(1, n, val) << endl;
        if (tip == 1)
            out << bsearch1(1, n, val) << endl;
        if (tip == 2)
            out << bsearch2(1, n, val) << endl;
    }



    return 0;
}