Cod sursa(job #3311095)

Utilizator domdiridomdidomDominik domdiridomdidom Data 19 septembrie 2025 13:38:02
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>

int binKer(int k, int szam, int * tomb, int bal, int jobb){
    int kozep = (bal + jobb) / 2;
    if(bal >= jobb)
        return kozep;

    // szam == tomb[kozep]
    if(k == 0){
        if(tomb[kozep] > szam)
            return binKer(k, szam, tomb, bal, kozep);
        if(tomb[kozep] <= szam)
            return binKer(k, szam, tomb, kozep + 1, jobb);
        return -1;
    }
    // tomb[kozep] <= szam < tomb[kozep + 1] 
    if(k == 1){
        if(tomb[kozep] > szam)
            return binKer(k, szam, tomb, bal, kozep);
        if(tomb[kozep] <= szam)
            return binKer(k, szam, tomb, kozep + 1, jobb);
        return kozep;
    }

    if(k == 2){
        if(tomb[kozep] >= szam)
            return binKer(k, szam, tomb, bal, kozep - 1) + 1;
        if(tomb[kozep] < szam)
            return binKer(k, szam, tomb, kozep + 1, jobb);
        return kozep;
    }
}

int main(){
    std::ifstream bem("cautbin.in");
    std::ofstream kim("cautbin.out");
    int n, m;
    bem >> n;
    int * tomb = new int[n];
    for(int i = 0; i < n; i++)  bem >> tomb[i];
    bem >> m;
    
    for(int i = 0; i < m; i++){
        int k, szam;
        bem >> k >> szam;
        kim << binKer(k, szam, tomb, 0, n - 1) << ' ';
    }
}