Cod sursa(job #2967480)

Utilizator bogdan007Bogdan Patrascu bogdan007 Data 19 ianuarie 2023 17:59:02
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>

using namespace std;

ifstream in("cautbin.in");
ofstream out("cautbin.out");

const int N = 100001;

int v[N];

void cb0(int v[N], int n, int x, int &poz)
{
    int st = 1, dr = n, m;
    while(st <= dr){
        m = (st + dr) / 2;
        if(v[m] == x){
            poz = m;
            st = m + 1;
        }
        else{
            dr = m - 1;
        }
    }
}

void cb1(int v[N], int n, int x, int &poz)
{
    int st = 1, dr = n, m;
    while(st <= dr){
        m = (st + dr) / 2;
        if(v[m] <= x){
            poz = m;
            st = m + 1;
        }
        else{
            dr = m - 1;
        }
    }
}

void cb2(int v[N], int n, int x, int &poz)
{
    int st = 1, dr = n, m;
    while(st <= dr){
        m = (st + dr) / 2;
        if(v[m] >= x){
            poz = m;
            st = m + 1;
        }
        else{
            dr = m - 1;
        }
    }
}

int main(){
    int n, m;
    in >> n;
    for(int i = 1; i <= n; i++){
        in >> v[i];
    }
    in >> m;
    int x, c /*cerinta*/, poz = -1;
    for(int i = 1; i <= m; i++){
        in >> c >> x;
    }
    if(c == 0){
        cb0(v, n, x, poz);
        out << poz << '\n';
    }
    if(c == 1){
        cb1(v, n, x, poz);
        out << poz << '\n';
    }
    if(c == 2){
        cb2(v, n, x, poz);
        out << poz << '\n';
    }
    return 0;
}