Cod sursa(job #2917427)

Utilizator tzancauraganuTzanca Uraganu tzancauraganu Data 4 august 2022 21:55:50
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int N, M;

/*
int search(int q, int s, int e, int x) {
    int p = -1;
    while (s <= e) {
        //cout << s << ' ' << e << '\n';
        int m = (s + e) / 2;
        if (q <= 1) {
            if (v[m] <= x) {
                p = m;
                s = m + 1;
            }
            else {
                e = m - 1;
            }
        } else {
            if (v[m] >= x) {
                p = m;
                e = m - 1;
            } else {
                s = m + 1;
            }
        }
    }
    if (p == -1)
        return -1;
    if (q <= 1)
        return v[p] == x || q == 1 ? p : -1;
    
    return p;
}
*/
 
int main()
{
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    
    vector<int> v;
    
    f >> N;
    for (int i = 1; i <= N; i++) {
        int x;
        f >> x;
        v.push_back(x);
    }
        
    f >> M;
    for (int i = 1; i <= M; i++) {
        int q, x;
        f >> q >> x;
        //g << search(q, 1, N, x) << ' ';
        if (q <= 1) {
            auto it = std::upper_bound(v.begin(), v.end(), x);
            if (it == v.begin()) {
                g << -1 << '\n';
            } else {
                --it;
                if (q == 0 && *it != x) {
                    g << -1 << '\n';
                } else {
                    g << (it - v.begin() + 1) << '\n';
                }
            }
        } else {
            auto it = std::lower_bound(v.begin(), v.end(), x);
            g << (it - v.begin() + 1) << '\n';
        }
    }
    
    f.close();
    g.close();
 
    return 0;
}