Cod sursa(job #3272785)

Utilizator try_roberrtRobert Serb try_roberrt Data 30 ianuarie 2025 20:44:23
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <algorithm>
#include <vector>
#pragma GCC optimize("O3")

using namespace std;

ifstream cin("cautbin.in");
ofstream cout("cautbin.out");

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n, q, cer, x;

    cin >> n;
    vector<int> v(n);
    for (int i = 0; i < n; i++) {
        cin >> v[i];
    }
    cin >> q;
    for (int i = 1; i <= q; i++) {
        cin >> cer >> x;
        if (cer == 0) {
            // Căutăm ultima poziție unde apare x
            auto it = upper_bound(v.begin(), v.end(), x);
            if (it == v.begin() || *(it - 1) != x) {
                cout << -1 << "\n";
            } else {
                cout << (it - v.begin()) << "\n";
            }
        }
        else if (cer == 1) {
            // Cea mai mare poziție <= x
            auto it = upper_bound(v.begin(), v.end(), x);
            cout << (it - v.begin()) << "\n";
        }
        else if (cer == 2) {
            // Cea mai mică poziție >= x
            auto it = lower_bound(v.begin(), v.end(), x);
            cout << (it - v.begin() + 1) << "\n";
        }
    }
}