Cod sursa(job #3154481)

Utilizator veibi1234veibi aron veibi1234 Data 4 octombrie 2023 19:30:46
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>

using namespace std;

int binkeres0(int elem, int l, int tomb[])
{
    int bal = 0, jobb = l-1;
    while (bal < jobb) {
        int kozep = (bal+jobb+1)/2;

        if (tomb[kozep] <= elem) {
            bal = kozep ;
        }
        else { // tomb[kozep] > elem
            jobb = kozep - 1;
        }
    }
    if (elem==tomb[bal])
        return bal;
    return -2;
}

int binkeres1(int elem, int l, int tomb[])
{
    int bal = 0, jobb = l-1;
    while (bal < jobb) {
        int kozep = (bal+jobb+1)/2;

        if (tomb[kozep] <= elem) {
            bal = kozep ;
        }
        else { // tomb[kozep] > elem
            jobb = kozep - 1;
        }
    }
    return bal;
}

int binkeres2(int elem, int l, int tomb[])
{
    int bal = 0, jobb = l-1;
    while (bal < jobb) {
        int kozep = (bal+jobb)/2;

        if (tomb[kozep] < elem) {
            bal = kozep+1;
        }
        else { // tomb[kozep] > elem
            jobb = kozep;
        }
    }
    return bal;
}
int main () {
    int i, n, m, tip, elem;
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f>>n;
    int v[n+1];
    for (i = 0; i < n; i++)
        f>>v[i];
    f>>m;
    while (m --){
        f>>tip>>elem;
        if (tip == 0)
            g<<(binkeres0(elem,n,v))+1<<'\n';
        if (tip == 1)
            g<<(binkeres1(elem,n,v))+1<<'\n';
        if (tip == 2)
            g<<(binkeres2(elem,n,v))+1<<'\n';
    }
    f.close();
    g.close();
    return 0;
}