Cod sursa(job #2071169)

Utilizator Andrei17Andrei Pascu Andrei17 Data 20 noiembrie 2017 14:00:51
Problema Cautare binara Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#define NMAX 100000
#define LIMIT 30

using namespace std;

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

int n, m, x;
int v[NMAX];

void cautareBinara(int C) {
    int pas = 1 << LIMIT;
    int r = 0;
    if (C == 0) {
        while (pas != 0) {
            if (r + pas <= n && v[r + pas] <= x) {
                r += pas;
            }
            pas >>= 1;
        }
        if (v[r] == x) {
            out << r << '\n';
        }
        else {
            out << -1 << '\n';
        }
        return;
    }
    else if (C == 1) {
        while (pas != 0) {
            if (r + pas <= n && v[r + pas] <= x) {
                r += pas;
            }
            pas >>= 1;
        }
        out << r << '\n';
        return;
    }
    while (pas != 0) {
        if (r + pas <= n && v[r + pas] < x) {
            r += pas;
        }
        pas >>= 1;
    }
    out << r + 1 << '\n';
    return;
}

int main()
{
    in >> n;
    for (int i = 1; i <= n; i++) {
        in >> v[i];
    }
    in >> m;

    for (int i = 0; i < m; i++) {
        int cond;
        in >> cond >> x;
        cautareBinara(cond);
    }
    return 0;
}