Cod sursa(job #2770849)

Utilizator andrei_C1Andrei Chertes andrei_C1 Data 23 august 2021 17:36:37
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int N, M;
vector<int>v;
int bs(int x) {
    int st = 1, dr = N, mid, ret = -1;
    while(st <= dr) {
        mid = (st + dr) >> 1;
        if(v[mid] < x) {
            st = mid + 1;
        } else if(v[mid] > x) {
            dr = mid - 1;
        } else {
            st = mid + 1;
            ret = mid;
        }
    }
    return ret;
}
int lbd(int x) {
    int st = 1, dr = N, mid, ret;
    while(st <= dr) {
        mid = (st + dr) >> 1;
        if(v[mid] <= x) {
            st = mid + 1;
            ret = mid;
        } else {
            dr = mid - 1;
        }
    }
    return ret;
}
int ubd(int x) {
    int st = 1, dr = N, mid, ret;
    while(st <= dr) {
        mid = (st + dr) >> 1;
        if(v[mid] < x) {
            st = mid + 1;
        } else {
            dr = mid - 1;
            ret = mid;
        }
    }
    return ret;
}
int main() {
    fin >> N;
    v = vector<int>(N + 1);
    for(int i = 1; i <= N; i++) {
        fin >> v[i];
    }
    fin >> M;
    for(int i = 1, q, x; i <= M; i++) {
        fin >> q >> x;
        if(q == 0) {
            fout << bs(x) << '\n';
        } else if(q == 1) {
            fout << lbd(x) << '\n';
        } else {
            fout << ubd(x) << '\n';
        }
    }
    return 0;
}