Cod sursa(job #2245792)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 25 septembrie 2018 20:59:12
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>

using namespace std;

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

int N, Q, step;
int v[100005];

void Binary_Search1(int value)
{
    int i, pas = step;
    for(i = 1; pas; pas >>= 1)
        if(i + pas <= N && v[i + pas] <= value)
            i += pas;

    if(v[i] == value)
        fout << i << '\n';
    else
        fout << -1 << '\n';
}

void Binary_Search2(int value)
{
    int i, pas = step;
    for(i = 1; pas; pas >>= 1)
        if(i + pas <= N && v[i + pas] <= value)
            i += pas;

    fout << i << '\n';
}

void Binary_Search3(int value)
{
    int i, pas = step;
    for(i = N; pas; pas >>= 1)
        if(i - pas >= 1 && v[i - pas] >= value)
            i -= pas;

    fout << i << '\n';
}

int main()
{
    fin >> N;
    for(int i = 1; i <= N; i++)
        fin >> v[i];

    step = 1;
    for(; step < N; step <<= 1);

    fin >> Q;
    int type, x;
    for(int i = 1; i <= Q; i++)
    {
        fin >> type >> x;

        if(type == 0)
            Binary_Search1(x);
        else if(type == 1)
            Binary_Search2(x);
        else
            Binary_Search3(x);
    }

    return 0;
}