Cod sursa(job #2203501)

Utilizator razvan242Zoltan Razvan-Daniel razvan242 Data 12 mai 2018 15:23:42
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <fstream>

using namespace std;

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

int n, m;
int a[100001];

void citesteDate() {
    fin >> n;
    for (int i = 1; i <= n; ++i)
        fin >> a[i];
}

int cautareBinara01(int op, int val) {
    int st = 1, dr = n;
    int mid, raspuns = -1;

    while (st <= dr) { // cat timp intervalul de lucru NU E VID
        mid = (st + dr) / 2;

        // st .... mid .... dr
        if (a[mid] <= val) {
            raspuns = mid;
            // trec in intervalul [mid + 1, dr]
            st = mid + 1;
        }
        else
            dr = mid - 1; // trec in intervalul [st, mid - 1]
    }

    if (op == 0 && a[raspuns] != val)
        return -1;
    else
        return raspuns;
}

int cautareBinara2(int val) {
    int st = 1, dr = n;
    int mid, raspuns = -1;

    while (st <= dr) {
        mid = (st + dr) / 2;

        if (a[mid] >= val) {
            raspuns = mid;
            dr = mid - 1;
        }
        else
            st = mid + 1;
    }

    return raspuns;
}

void rezolvaIntrebari() {
    fin >> m;
    int op, val;

    while (m--) {
        fin >> op >> val;
        if (op <= 1)
            fout << cautareBinara01(op, val) << '\n';
        else
            fout << cautareBinara2(val) << '\n';
    }
}

int main()
{
    citesteDate();
    rezolvaIntrebari();
    return 0;
}