Cod sursa(job #2965269)

Utilizator TODEToderita Mihai TODE Data 14 ianuarie 2023 19:07:10
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.57 kb
#include <fstream>
using namespace std;

ifstream in("cautbin.in");
ofstream out("cautbin.out");
const int N = 1e5;
int n , v[N + 1] , m;
int solve_0(int low , int hi , int value , int rez){
    if(low > hi){
        return rez;
    }
    int mid = (low + hi) / 2;
    if(v[mid] == value){
        return solve_0(mid + 1 , hi , value , mid);
    }
    else if(v[mid] < value){
        return solve_0(mid + 1 , hi , value , rez);
    }
    else{
        return solve_0(low , mid - 1 , value , rez);
    }
}
int solve_1(int low , int hi , int value , int rez){
    if(low > hi){
        return rez;
    }
    int mid = (low + hi) / 2;
    if(v[mid] > value){
        return solve_1(low , mid - 1 , value , rez);
    }
    if(v[mid] <= value){
        return solve_1(mid + 1 , hi , value , mid);
    }
}
int solve_2(int low , int hi , int value , int rez){
    if(low > hi){
        return rez;
    }
    int mid = (low + hi) / 2;
    if(v[mid] < value){
        return solve_2(mid + 1 , hi , value , rez);
    }
    if(v[mid] >= value){
        return solve_2(low , mid - 1 , value , mid);
    }
}

int main(){
    in >> n;
    for(int i = 1 ; i <= n ; i++){
        in >> v[i];
    }
    in >> m;
    while(m--){
        int q , nr;
        in >> q >> nr;
        int rez = 0;
        if(q == 0){
            out << solve_0(1 , n , nr , -1) << '\n';
        }
        else if(q == 1){
            out << solve_1(1 , n , nr , rez) << '\n';
        }
        else{
            out << solve_2(1 , n , nr , rez) << '\n';
        }
    }
}