Cod sursa(job #2736735)

Utilizator niculaandreiNicula Andrei Bogdan niculaandrei Data 3 aprilie 2021 20:21:01
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N_MAX = 1e5 + 5;

int N, M;
int v[N_MAX];
int op, x;

int MinSearch(int val)
{
    int st = 1, dr = N, mid, best;
    while (st <= dr) {
        mid = (1LL * st + dr) / 2;
        if (v[mid] <= val) {
            best = mid;
            st = mid + 1;
        }
        else {
            dr = mid - 1;
        }
    }
    return best;
}

int MaxSearch(int val)
{
    int st = 1, dr = N, mid, best;
    while (st <= dr) {
        mid = (1LL * st + dr) / 2;
        if (v[mid] >= val) {
            best = mid;
            dr = mid - 1;
        }
        else {
            st = mid + 1;
        }
    }
    return best;
}

int main()
{
    fin >> N;
    for (int i = 1; i <= N; i++) {
        fin >> v[i];
    }
    fin >> M;
    for (int i = 1; i <= M; i++) {
        fin >> op >> x;
        if (op == 0) {
            int pos = MinSearch(x);
            if (v[pos] == x) {
                fout << pos << "\n";
            }
            else {
                fout << "-1\n";
            }
        }
        else if (op == 1) {
            int pos = MinSearch(x);
            fout << pos << "\n";
        }
        else if (op == 2) {
            int pos = MaxSearch(x);
            fout << pos << "\n";
        }
    }
    return 0;
}