Cod sursa(job #2928964)

Utilizator coso2312Cosmin Bucur coso2312 Data 24 octombrie 2022 12:27:15
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <cstring>
using namespace std;

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

int main() {
    const int MAX_LENGTH = 100000;
    int n, a[MAX_LENGTH + 1];
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> a[i];
    }
    int m;
    fin >> m;
    while (m > 0) {
        int q, x;
        fin >> q >> x;
        if (q == 0 || q == 1) {
            int left = 1, right = n, mid;
            while (left < right) {
                mid = left + (right - left) / 2;
                if (a[mid] <= x) {
                    left = mid + 1;
                } else {
                    right = mid;
                }
            }
            if (q == 0) {
                if (a[mid] == x) {
                    fout << mid  << "\n";
                } else {
                    fout << -1 << "\n";
                }
            } else if (q == 1) {
                if (a[mid] <= x) {
                    fout << mid << "\n";
                }
            }
        } else if (q == 2) {
            int left = 1, right = n, mid;
            while (left < right) {
                mid = left + (right - left) / 2;
                if (a[mid] >= x) {
                    right = mid;
                } else {
                    left = mid + 1;
                }
            }
            if (a[right] == x) {
                fout << right << "\n";
            }
        }
        --m;
    }
    return 0;
}