Cod sursa(job #2861814)

Utilizator Toaster_KeyboardMihaescu Vlad-Mihai Toaster_Keyboard Data 4 martie 2022 15:05:05
Problema Cautare binara Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.78 kb
#pragma region Template
#include <bits/stdc++.h>
using namespace std;
#define ll long long

// Files
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
#pragma endregion Template

int binSrc(vector<int> vect, int find) {
    int left = 0, right = vect.size() - 1;
    int pos = -1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (vect[mid] == find)
            pos = mid + 1, left = mid + 1;
        else if (vect[mid] < find)
            left = mid + 1;
        else
            right = mid - 1;
    }
    return pos;
}

int lowerBound(vector<int> vect, int find) {
    int left = 0, right = vect.size() - 1;
    int pos = -1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (vect[mid] >= find)
            pos = mid + 1, right = mid - 1;
        else if (vect[mid] < find)
            left = mid + 1;
    }
    return pos;
}

int upperBound(vector<int> vect, int find) {
    int left = 0, right = vect.size() - 1;
    int pos = -1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (vect[mid] <= find)
            pos = mid + 1, left = mid + 1;
        else if (vect[mid] > find)
            right = mid - 1;
    }
    return pos;
}

int main() {
    int n;      fin >> n;
    vector<int> vect(n);
    for (auto& it : vect)
        fin >> it;
    int m;     fin >> m;
    while (m--) {
        int option, num;     fin >> option >> num;
        int ans;
        switch (option) {
            case 0:
                ans = binSrc(vect, num);
                break;
            case 1:
                ans = upperBound(vect, num);
                break;
            default:
                ans = lowerBound(vect, num);
                break;
        };
        fout << ans << '\n';
    }
    return 0;
}