Cod sursa(job #2550012)

Utilizator zanugMatyas Gergely zanug Data 18 februarie 2020 11:01:48
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int N = 1e5 + 10;

int n, m;
int x[N];

int bin0 (int k, int l, int r)
{
    if(l == r && x[l] != k)
        return -2;
    if(l == r && x[l] == k)
        return l;

    int mid = (l + r) / 2 + 1;

    if(x[mid] > k)
        return bin0(k, l, mid-1);
    else
        return bin0(k, mid, r);

}

int bin1 (int k, int l, int r)
{
    if(l == r)
    {
        return l;
    }
    int mid = (l + r) / 2 + 1;

    if(x[mid] > k)
        return bin1(k, l, mid-1);
    else
        return bin1(k, mid, r);
}

int bin2 (int k, int l, int r)
{
    if(l == r)
    {
        return l;
    }
    int mid = (l + r) / 2 + 1;

    if(x[mid] < k)
        return bin2(k, mid, r);
    else
        return bin2(k, l, mid - 1);
}



int main()
{
    fin >> n;
    for(int i = 0; i < n; ++i) fin >> x[i];

    fin >> m;
    int v, k;

    while(m--)
        {
            fin >> v >> k;

            if(v == 0)
                fout << bin0(k, 0, n-1) + 1 << '\n';
            if(v == 1)
                fout << bin1(k, 0, n-1) + 1 << '\n';
            if(v == 2)
                fout << bin2(k, 0, n-1) + 1 << '\n';
        }
    return 0;
}