Cod sursa(job #3170558)

Utilizator jurubescuandreea jurubescu jurubescu Data 17 noiembrie 2023 19:18:39
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>

using namespace std;

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

vector<int> a;
int n, m;

void citire() {
    cin >> n;
    for(int i = 0; i < n; i++) {
        int x;
        cin >> x;
        a.push_back(x);
    }
    cin >> m;
}

void cautBin01(int x, int c) {
    int p, i;
    for(p = 1; p < n; p <<= 1);
    for(i = 0; p; p >>= 1) 
        if(i + p < n && a[i + p] <= x)
            i += p;
    if(!c) {
        if(a[i] == x)
            cout << i + 1;
        else
            cout << -1;
    } else  
        cout << i + 1;
}

void cautBin2(int x) {
    int p, i;
    for(p = 1; p < n; p <<= 1);
    for(i = 0; p; p >>= 1) 
        if(i + p < n && a[i + p] < x)
            i += p;
    cout << i + 2;
}

void rezolvare() {
    for(int i = 1; i <= m; i++) {
        int x, c;
        cin >> c >> x;
        if(!c || c == 1)
            cautBin01(x, c);
        else    
            cautBin2(x);
        cout << "\n";
    }
}

int main() {
    citire();
    rezolvare();

    return 0;
}