Cod sursa(job #1943792)

Utilizator AndreiEDMMateescu Andrei AndreiEDM Data 28 martie 2017 20:14:33
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.65 kb
#include <iostream>
#include <algorithm>
#include <fstream>

using namespace std;

int v[100],n,x;
ifstream input("cautbin.in");
ofstream output("cautbin.out");

int binarys0(int left, int right, int value)
{
    int middle = (left+right)/2;
    if (value==v[middle])
        return middle;
    else
        if (left<right)
            if (value < v[middle])
                binarys0(left, middle-1,value);
            else
                binarys0(middle+1, right, value);
            else
                return -1;
}

int binarys1(int left, int right, int value)
{
    int middle;
    int n = right;

    while(left < right){
        middle = (left + right)/2;
        if (v[middle] <= value)
            left = middle + 1;
        else
            right = middle;
    }
    middle = (left + right)/2;
    if (v[middle] > value)
        middle--;
    return middle;
}

int binarys2(int left, int right, int value)
{
    int middle;
    int n = right;

    while(left < right){
        middle = (left + right)/2;
        if (v[middle] <= value)
            left = middle + 1;
        else
            right = middle;
    }
    middle = (left + right)/2;
    if (v[middle] > value)
        middle++;
    return middle;
}

int main()
{
    int m;
    input >> n;
    for(int i=0;i<n;++i)
        input >> v[i];

    input >> m;
    for(int i=0;i<m;++i){
        int a,b;
        input >> a >> b;
        if (a == 0)
            output << binarys0(0,n-1,b)<<'\n';
        if (a == 1)
            output << binarys1(0,n-1,b)<<'\n';
        if (a == 2)
            output << binarys2(0,n-1,b)<<'\n';
        }
}