Cod sursa(job #2357993)

Utilizator petru.theodorCristea Petru Theodor petru.theodor Data 27 februarie 2019 20:47:43
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>
using namespace std;

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

int n, v[100], val, x, y, tip, M;
int read()
{
    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>v[i];
}

int search0(int x, int y)
{
    int m;
    while (x <= y) {
        m = (x + y) / 2;
        if (v[m] <= val)
            x = m + 1;
        else
            y = m - 1;
    }
    m = (x + y) / 2;
    if(v[m] > val)
        m--;
    if(v[m] == val)
        return m;
    return -1;
}

int search1(int x, int y)
{
    int m;
     while(x < y){
        m = (x + y) / 2;
        if(v[m] <= val)
            x = m + 1;
        else
            y = m;
    }
    m = (x + y) / 2;
    if(v[m] > val)
        --m;
    return m;
}

int search2(int x, int y){
    int m;

    while(x < y){
        m = (x + y) / 2;
        if(v[m] < val)
            x = m + 1;
        else
            y = m;
    }
    m = (x + y) / 2;
    if(v[m] < val)
        m++;
    return m;
}
int main()
{
    read();
    fin>>M;
    for(int i=0; i<M; i++){
        fin>>tip>>val;
        if(tip == 0)
            fout<<search0(1, n);
        else if(tip == 1)
            fout<<search1(1, n);
        else if(tip == 2)
            fout<<search2(1, n);
    }
}