Cod sursa(job #3170534)

Utilizator jurubescuandreea jurubescu jurubescu Data 17 noiembrie 2023 19:00:43
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 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 cautBin(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 == 0) {
        if(a[i] == x)
            cout << i + 1;
        else
            cout << "-1";
    } else if(c == 1) 
        cout << i + 1;
    else {
        if(a[i] == x) {
            for( ; a[i - 1] == x; i--);
            cout << i + 1;
        }
        else
            cout << i + 2;
    }
    cout << "\n";
}

void rezolvare() {
    for(int i = 1; i <= m; i++) {
        int x, c;
        cin >> c >> x;
        cautBin(x, c);
    }
}

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

    return 0;
}