Cod sursa(job #682948)

Utilizator Mishu91Andrei Misarca Mishu91 Data 19 februarie 2012 19:32:05
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>

using namespace std;

const int MAX_N = 100005;
int N, M;
int A[MAX_N];

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

void read() {
    fin >> N;

    for (int i = 0; i < N; ++i) {
        fin >> A[i];
    }
}

int binary_search1(int A[MAX_N], int N, int val) {
    int lo = -1, hi = N;

    while (hi - lo > 1) {
        int mid = (hi + lo) / 2;
        if (A[mid] <= val) {
            lo = mid;
        } else {
            hi = mid;
        }
    }

    return lo;
}

int binary_search2(int A[MAX_N], int N, int val) {
    int lo = -1, hi = N;

    while (hi - lo > 1) {
        int mid = (hi + lo) / 2;
        if (A[mid] < val) {
            lo = mid;
        } else {
            hi = mid;
        }
    }

    return hi;
}

void solve() {
    fin >> M;

    for (int i = 0; i < M; i++) {
        int type, val;
        fin >> type >> val;

        int pos = -1;
        if (type == 1 || type == 0) {
            pos = binary_search1(A, N, val);
        } else {
            pos = binary_search2(A, N, val);
        }
        if (type == 0 && A[pos] != val){
            fout << "-1\n";
        } else {
            fout << pos + 1 << "\n";
        }
    }
}

int main() {
    read();
    solve();
    return 0;
}