Cod sursa(job #2932620)

Utilizator coso2312Cosmin Bucur coso2312 Data 3 noiembrie 2022 12:30:23
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.9 kb
#include <iostream>
#include <fstream>
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;
    int i = 1;
    while (m > 0) {
        int nr, x;
        fin >> nr >> x;
        if (nr == 0) {
            int left = 1, right = n, mid;
            while (left < right) {
                mid = left + (right - left) / 2;
                //cout << mid << " ";
                if (a[mid] <= x && a[mid + 1] <= x && mid + 1 <= n) {
                    left = mid + 1;
                } else {
                    right = mid;
                }
            }
            if (nr == 0) {
                if (a[right] == x) {
                    fout << right << "\n";
                } else {
                    fout << -1 << "\n";
                }
            }
        } else if (nr == 2) {
            int left = 1, right = n, mid;
            while (left < right) {
                mid = (left + right) / 2;
                if (a[mid] >= x && a[mid - 1] >= x && mid - 1 >= 1) {
                    right = mid;
                } else {
                    left = mid + 1;
                }
            }
            if (a[left] >= x) {
                fout << left << "\n";
            }
        } else if (nr == 1) {
            int left = 1, right = n, mid;
            while (left < right) {
                mid = left + (right - left) / 2;
                if (a[mid] <= x && mid + 1 <= n && a[mid + 1] <= x) {
                    left = mid + 1;
                } else {
                    right = mid;
                }
            }
            if (a[right] <= x) {
                fout << right << "\n";
            }
        }
        --m;
    }
    return 0;
}