Cod sursa(job #2769348)

Utilizator victorgoreanuGoreanu Victor victorgoreanu Data 14 august 2021 21:09:43
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.97 kb
#include <bits/stdc++.h>
using namespace std;
string __fname = "cautbin"; ifstream in (__fname + ".in"); ofstream out (__fname + ".out"); 
#define cin in 
#define cout out
vector <int> a;
vector <int> out1;

int zero(int target){
    int l = 0, r = a.size() - 1, mid;
    int ans = -1;
    while (l <= r){
        mid = l + (r - l) / 2;
        if (a[mid] == target){
            ans = mid;
            l = mid + 1;
        }
        if (a[mid] > target) r = mid - 1;
        if (a[mid] < target) l = mid + 1;
    }
    return ans;
}

int one(int target){
    int l = 0, r = a.size() - 1, mid;
    int ans = -1;
    while (l <= r){
        mid = l + (r - l) / 2;
        if (a[mid] == target){
            ans = mid;
            l = mid + 1;
        }
        if (a[mid] > target) r = mid - 1;
        if (a[mid] < target) {
            if (a[mid] > ans) ans = mid;
            l = mid + 1;
        }
    }
    return ans;
}

int two(int target){
    int l = 0, r = a.size() - 1, mid;
    int ans = -1;
    while (l <= r){
        mid = l + (r - l) / 2;
        if (a[mid] == target){
            ans = mid;
            r = mid - 1;
        }
        if (a[mid] > target) {
            if (a[mid] < ans) ans = mid;
            r = mid - 1;
        }
        if (a[mid] < target) {
            l = mid + 1;
        }
    }
    return ans;
}

int main(){
    int n, m, l, x;
    cin >> n;
    for (int i = 0; i < n; i++){
        int t;
        cin >> t;
        a.push_back(t);
    }
    cin >> m;
    for (int i = 0; i < m; i++){
        cin >> l >> x;
        if (l == 0){
            int z = zero(x);
            out1.push_back(z);
        }
        if (l == 1){
            int z = one(x);
            out1.push_back(z);
        }
        if (l == 2){
            int z = two(x);
            out1.push_back(z);
        }
    }
    for (int i = 0; i < out1.size(); i++){
        cout << out1[i] + 1 << '\n';
    }
    return 0;
}