Cod sursa(job #3341540)

Utilizator filipdanieloanFilip-Daniel Oancea filipdanieloan Data 19 februarie 2026 21:20:08
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
using namespace std;

int n, v[100005];

void q0(int x) {
    int ans = 0;
    for(int pas = 1 << 17; pas; pas >>= 1) {
        if(ans + pas <= n && v[ans + pas] <= x) {
            ans += pas;
        }
    }
    if(v[ans] == x)
        cout << ans << '\n';
    else
        cout << "-1\n";
}

void q1(int x) {
    int ans = 0;
    for(int pas = 1 << 17; pas; pas >>= 1) {
        if(ans + pas <= n && v[ans + pas] <= x) {
            ans += pas;
        }
    }
    cout << ans << '\n';
}

void q2(int x) {
    int ans = n;
    for(int pas = 1 << 17; pas; pas >>= 1) {
        if(ans >= pas && v[ans - pas] >= x) {
            ans -= pas;
        }
    }
    cout << ans << '\n';
}

signed main() {
    cin.tie(nullptr)->sync_with_stdio(false);
#ifndef LOCAL
    freopen("cautbin.in", "r", stdin);
    freopen("cautbin.out", "w", stdout);
#endif

    cin >> n;
    for(int i = 1; i <= n; ++i)
        cin >> v[i];

    int m; cin >> m;
    while(m--) {
        int op, x; cin >> op >> x;
        if(op == 0)
            q0(x);
        else if(op == 1)
            q1(x);
        else
            q2(x);
    }

    return 0;
}