Cod sursa(job #2815582)

Utilizator guzgandemunteIonescu Laura guzgandemunte Data 9 decembrie 2021 21:07:52
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <iostream>
#include <fstream>
#define NMAX 100000

using namespace std;

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

int n;
int v[NMAX];

int leftmostBinarySearch(int x) {
    int mij, st = 0, dr = n - 1, ans = -1;

    while (st <= dr) {
        mij = st + (dr - st) / 2;
        if (v[mij] < x) st = mij + 1;
        else {
            ans = mij;
            dr = mij - 1;
        }
    }

    return ans;
}

int rightmostBinarySearch(int x) {
    int mij, st = 0, dr = n - 1, ans = -1;

    while (st <= dr) {
        mij = st + (dr - st) / 2;
        if (v[mij] > x) dr = mij - 1;
        else {
            ans = mij;
            st = mij + 1;
        }
    }

    return ans;
}
int main()
{
    fin >> n;

    for (int i = 0; i < n; ++i) fin >> v[i];

    int left, right, x, queries, opt;

    fin >> queries;

    while (queries--) {
        fin >> opt >> x;
        switch (opt) {
            case 0: {
            right = rightmostBinarySearch(x);
            fout << (v[right] == x ? right + 1 : -1);
            break;
            }
            case 1: {
                right = rightmostBinarySearch(x);
                fout << right + 1;
                break;
            }
            case 2: {
                left = leftmostBinarySearch(x);
                fout << left + 1;
                break;
            }
            default: fout << "Optiunea nu exista in meniu";
        }
        fout << '\n';
    }

    fin.close();
    fout.close();
    return 0;
}