Cod sursa(job #2232287)

Utilizator Raoul_16Raoul Bocancea Raoul_16 Data 18 august 2018 15:02:45
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.01 kb
#include <fstream>
const std::string programName = "cautbin";
std::ifstream f(programName + ".in");
std::ofstream g(programName + ".out");
const int MAX = 1e5;
int equalto0(int, int, int[], int);
int equalOrLessThan1(int, int, int[], int);
int equalOrGreaterThan2(int, int, int[], int);
int main() {
    int N;
    f >> N;
    int v[MAX];
    for (int i = 1; i <= N; ++i)
        f >> v[i];
    int M;
    f >> M;
    for (int i = 1; i <= M; ++i) {
        int quest, val;
        f >> quest >> val;
        if (!quest)
            g << equalto0(1, N, v, val) << "\n";
        if (quest == 1)
            g << equalOrLessThan1(1, N, v, val) << "\n";
        if (quest == 2)
            g << equalOrGreaterThan2(1, N, v, val);
    }
    return 0x0;
}
int equalto0(int left, int right, int v[], int value) {
    if (left == right) {
        if (v[left] == value)
            return left;
        else
            return -1;
    } else {
        //for (int i = 1; i <= N; ++i) {
        int mid = (left + right + 1) / 2;
            if (value >= v[mid])
                //left = mid;
                return  equalto0(mid, right, v, value);
            else
                //right = mid - 1;
                return  equalto0(left, mid - 1, v, value);
        }
    //}
    //return left;
}
int equalOrLessThan1(int left, int right, int v[], int value) {
    if (left == right)
        return left;
    else {
        int mid = (left + right + 1) / 2;
            if (v[mid] <= value)
                return  equalOrLessThan1(mid, right, v, value);
            else
                return  equalOrLessThan1(left, mid - 1, v, value);
    }
}
int equalOrGreaterThan2(int left, int right, int v[], int value) {
    if (left == right)
        return left;
    else {
        int mid = (left + right) / 2;
            if (value <= v[mid])
                return  equalOrGreaterThan2(left, mid, v, value);
            else
                return  equalOrGreaterThan2(mid + 1, right, v, value);
    }
}