Cod sursa(job #2285291)

Utilizator Alexghita96Ghita Alexandru Alexghita96 Data 18 noiembrie 2018 13:51:44
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

void read(int &n, int &m, vector<int> &arr, vector<pair<int, int> > &queries) {
    int arr_val;
    int query_type, query_val;

    scanf("%d", &n);

    for (int i = 0; i < n; i++) {
        scanf("%d", &arr_val);
        arr.push_back(arr_val);
    }

    scanf("%d", &m);

    for (int i = 0; i < m; i++) {
        scanf("%d %d", &query_type, &query_val);
        queries.push_back(make_pair(query_type, query_val));
    }
}

void solve(vector<int> arr, vector<pair<int, int> > queries) {
    for (vector<pair<int, int> >:: iterator it = queries.begin(); it != queries.end(); it++) {
        vector<int>::iterator index;
        int output;

        switch (it->first) {
        case 0:
            index = upper_bound(arr.begin(), arr.end(), it->second);
            output = index - arr.begin();
            if (output < 1 || output > arr.size() || arr[output - 1] != it->second) {
                output = -1;
            }
            break;
        case 1:
            index = lower_bound(arr.begin(), arr.end(), it->second + 1);
            output = index - arr.begin();
            break;
        default:
            index = upper_bound(arr.begin(), arr.end(), it->second - 1);
            output = index - arr.begin() + 1;
            break;
        }

        printf("%d\n", output);
    }
}

int main() {
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);

    int n, m;
    vector<int> arr;
    vector<pair<int, int> > queries;

    read(n, m, arr, queries);
    solve(arr, queries);
}