Cod sursa(job #2638996)

Utilizator vladm98Munteanu Vlad vladm98 Data 30 iulie 2020 20:11:04
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>


using namespace std;
//Se dă un vector x cu n elemente numere naturale, ordonate crescător,
//și un vector y cu m elemente, de asemenea numere naturale. Verificați pentru fiecare element al vectorului y dacă apare în x
int a[100001];

int cautareBinaraRecursiva(int st, int dr, int val) {
    if (st == dr) return st;
    int mijloc = (st + dr) / 2;
    if (a[mijloc + 1] <= val) {
        return cautareBinaraRecursiva(mijloc + 1, dr, val);
    } else {
        return cautareBinaraRecursiva(st, mijloc, val);
    }
}

int cautarebinara(int val, int n){
    return cautareBinaraRecursiva(0, n, val);
}

int main() {
    int tip, N, M, x;
    ifstream f("cautbin.in");
    ofstream g("cautbin.out");
    f >> N;
    for (int i = 1; i <= N; i++)
        f >> a[i];
    f >> M;
    for (int i = 1; i <= M; i++) {
        f >> tip >> x;
        if (tip == 0) {
            int poz;
            poz = cautarebinara(x, N);
            if (a[poz] == x)
                g << poz << '\n';
            else
                g << "-1" << '\n';

        }
        if (tip == 1) {
            g << cautarebinara(x, N) << '\n';
        }
        if (tip == 2) {
            g << cautarebinara(x - 1, N) + 1 << '\n';
        }
    }
    f.close();
    return 0;
}