Cod sursa(job #3140173)

Utilizator vozian.anghelinaAnghelina Vozian vozian.anghelina Data 4 iulie 2023 17:04:08
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.69 kb
#include <bits/stdc++.h>
using namespace std;

int A[100100];
int n,m,var,x, pozitie;
int l = 1, r;


int var1(){
    while(l <= r){
        // cout << l << " l" << endl;
        // cout << r << " r" << endl;
        int m = (l+r)/2;
        if(A[m] < x){
            l = m+1;
        } else if(A[m] > x){
            r = m-1;
        } else {
            pozitie = m;
            // cout << pozitie << endl;
            l = m+1;
            var1();
        }
    }
    return pozitie;
}

int var2(){
    while(l <= r){
        // cout << l << " l" << endl;
        // cout << r << " r" << endl;
        int m = (l+r)/2;
        if(A[m] < x){
            l = m+1;
        } else if(A[m] >= x){
            pozitie = m;
            // cout << pozitie << endl;
            l = m+1;
            var1();
        }
    }
    return pozitie;
}

int var3(){
    while(l <= r){
        // cout << l << " l" << endl;
        // cout << r << " r" << endl;
        int m = (l+r)/2;
        if(A[m] <= x){
            pozitie = m;
            // cout << pozitie << endl;
            r = m-1;
            l = 1;
            var1();
        } else if(A[m] > x){
            r = m-1;
        }
    }
    return pozitie;
}

int main(){
    ifstream cin("cautbin.in");
    ofstream cout("cautbin.out");
    cin >> n;

    for(int i=1; i<=n; i++){
        cin >> A[i];
    }
    
    cin >> m;
    for(int i=1; i<=m; i++){
        cin >> var >> x;
        if(var == 0){
            l=1, r = n, pozitie = -1;
            cout << var1() << endl;
        } else if(var == 1){
            l=1; r=n, pozitie = -1;
            cout << var2() << endl;
        } else {
            l=1; r=n, pozitie = -1;
            cout << var3() << endl;
        }
    }
}