Cod sursa(job #1838012)

Utilizator BLz0rDospra Cristian BLz0r Data 30 decembrie 2016 20:01:22
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>
using namespace std;

#define NMAX 100002

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

int (*func[3])(int x);

int N;
int v[NMAX];

int cautare0(int x) {

    int st = 1, dr = N, poz = -1;

    while (st <= dr) {
        int mid = (st + ((dr - st) >> 1));

        if (v[mid] == x)
            poz = mid;

        if (v[mid] <= x)
            st = mid + 1;
        else
            dr = mid - 1;
    }

    return poz;
}

int cautare1(int x) {

    int st = 1, dr = N, poz = -1;

    while (st <= dr) {
        int mid = (st + ((dr - st) >> 1));

        if (v[mid] <= x) {
            st = mid + 1;
            poz = mid;
        }
        else
            dr = mid - 1;
    }

    return poz;
}

int cautare2(int x) {

    int st = 1, dr = N, poz = -1;

    while (st <= dr) {
        int mid = st + ((dr - st) >> 1);

        if (v[mid] >= x) {
            dr = mid - 1;
            poz = mid;
        }
        else
            st = mid + 1;
    }

    return poz;
}

int main() {

    fin >> N;

    for (int i = 1; i <= N; ++i)
        fin >> v[i];

    func[0] = cautare0;
    func[1] = cautare1;
    func[2] = cautare2;

    int T;

    fin >> T;

    while (T--) {
        int t, x;
        fin >> t >> x;

        fout << func[t](x) << "\n";
    }

    return 0;
}