Cod sursa(job #1456087)

Utilizator BFlorin93Balint Florin-Lorand BFlorin93 Data 29 iunie 2015 19:11:09
Problema Cautare binara Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>

using namespace std;

static string Output_File_Name = "cautbin.out";
static string Input_File_Name = "cautbin.in";

ofstream outFile;
ifstream inFile;

int N,M,*A;

int bsearch0(int val);

int bsearch1(int val);

int bsearch2(int val);

int main() {

    inFile.open("cautbin.in");
    outFile.open("cautbin.out");
    int q,val;
    inFile >> N;
    A = new int[N];

    for(int i = 0; i < N ; i++){
        inFile >> A[i];
    }
    inFile >> M;

    for (int i = 0;i < M ; i++){
        inFile >> q >> val;
        switch(q){
            case 0 : outFile << bsearch0(val) << endl;break;
            case 1 : outFile << bsearch1(val) << endl;break;
            case 2 : outFile << bsearch2(val) << endl;break;
        }
    }

    inFile.close();
    outFile.close();

    return 0;
}

int bsearch0(int val){
    int i, step;
    for (step = 1; step < N; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step < N && A[i + step] <= val)
            i += step;

    if (A[i] == val)
        return i + 1;
    else return -1;
}

int bsearch1(int val){
    int i, step;
    for (step = 1; step < N; step <<= 1);
    for (i = 0; step; step >>= 1)
        if (i + step < N && A[i + step] <= val)
            i += step;

    return  i + 1;
}

int bsearch2(int val){
    int i, step;
    for (step = 1; step < N; step <<= 1);
    for (i = N - 1; step; step >>= 1)
        if (i  - step > 0 && A[i - step] >= val)
            i -= step;

    return  i + 1;
}