Cod sursa(job #3324371)

Utilizator octavianioan_15Gainaru Octavian octavianioan_15 Data 22 noiembrie 2025 10:16:05
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.81 kb
#include <fstream>
using namespace std;

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

int main() {
    int n, m;
    int v[100001];

    in >> n;
    for (int i = 0; i < n; i++) {
        in >> v[i];
    }

    in >> m;
    for (int i = 0; i < m; i++) {
        int tip, x;
        in >> tip >> x;

        if (tip == 0) {
            // Cea mai mare pozitie cu valoarea x
            int st = 0, dr = n - 1, poz = -1;
            while (st <= dr) {
                int mid = st + (dr - st) / 2;
                if (v[mid] == x) {
                    poz = mid;
                    st = mid + 1;
                } else if (v[mid] < x) {
                    st = mid + 1;
                } else {
                    dr = mid - 1;
                }
            }
            if (poz != -1) poz++;
            out << poz << "\n";
        }
        else if (tip == 1) {
            // Cea mai mare pozitie cu valoarea <= x
            int st = 0, dr = n - 1, poz = -1;
            while (st <= dr) {
                int mid = st + (dr - st) / 2;
                if (v[mid] <= x) {
                    poz = mid;
                    st = mid + 1;
                } else {
                    dr = mid - 1;
                }
            }
            poz++;
            out << poz << "\n";
        }
        else if (tip == 2) {
            // Cea mai mica pozitie cu valoarea >= x
            int st = 0, dr = n - 1, poz = -1;
            while (st <= dr) {
                int mid = st + (dr - st) / 2;
                if (v[mid] >= x) {
                    poz = mid;
                    dr = mid - 1;
                } else {
                    st = mid + 1;
                }
            }
            poz++;
            out << poz << "\n";
        }
    }

    return 0;
}