Cod sursa(job #1990178)

Utilizator cosmo0093Raduta Cosmin cosmo0093 Data 10 iunie 2017 18:29:05
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.65 kb
#include <iostream>
#include <fstream>
#include <vector>

int binary_0(std::vector<int> &myV, int val, int left, int right) {
    if (left > right) {
        left--;
        if (myV[left] != val) {
            return -1;
        }
        return left;
    }
    int m = left + (right - left) / 2;
    if (myV[m] > val) {
        return binary_0(myV, val, left, m - 1);
    }
    return binary_0(myV, val, m + 1, r);
}

int binary_1(std::vector<int> &myV, int val, int left, int right) {
    if (left > right) {
        left--;
        return left;
    }
    int m = left + (right - left) / 2;
    if (myV[m] > val) {
        return binary_1(myV, val, left, m - 1);
    }
    return binary_1(myV, val, m + 1, r);
}

int binary_2(std::vector<int> &myV, int val, int left, int right) {
    if (left > right) {
        return left;
    }
    int m = left + (right - left) / 2;
    if (myV[m] >= val) {
        return binary_2(myV, val, left, m - 1);
    }
    return binary_2(myV, val, m + 1, r);
}

int main() {
    std::ifstream fileIn("cautbin.in");
    std::ofstream fileOut("cautbin.out");

    int nV;
    fileIn >> nV;

    std::vector<int> myV;

    int aux;
    for (int i(0); i < nV; i++) {
        fileIn >> aux;
        myV.push_back(aux);
    }

    int a, b, c;

    fileIn >> c;

    for (int i(0); i < c; i++) {
        fileIn >> a >> b;
        if (a == 0) {
            fileOut << binary_0(myV, b, 0, nV - 1) << std::endl;
        } else if (a == 1) {
            fileOut << binary_0(myV, b, 0, nV - 1) << std::endl;
        } else {
            fileOut << binary_0(myV, b, 0, nV - 1) << std::endl;
        }
    }

    fileIn.close();
    fileOut.close();
    return 0;
}