Cod sursa(job #2100478)

Utilizator FrequeAlex Iordachescu Freque Data 5 ianuarie 2018 18:07:24
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 100000 + 5;

int n, m;
int v[NMAX];

int bs0(int x)
{
    int st = 1, dr = n, mijl, ans;

    while (st <= dr)
    {
        mijl = (st + dr) / 2;
        if (v[mijl] <= x)
        {
            st = mijl + 1;
            ans = mijl;
        }
        else
            dr = mijl - 1;
    }

    if (v[ans] == x)
        return ans;
    return -1;
}

int bs1(int x)
{
    int st = 1, dr = n, mijl, ans;

    while (st <= dr)
    {
        mijl = (st + dr) / 2;
        if (v[mijl] <= x)
        {
            st = mijl + 1;
            ans = mijl;
        }
        else
            dr = mijl - 1;
    }

    return ans;
}

int bs2(int x)
{
    int st = 1, dr = n, mijl, ans;

    while (st <= dr)
    {
        mijl = (st + dr) / 2;
        if (v[mijl] >= x)
        {
            dr = mijl - 1;
            ans = mijl;
        }
        else
            st = mijl + 1;
    }

    return ans;
}

void read()
{
    fin >> n;
    for (int i = 1; i <= n; ++i)
        fin >> v[i];
    fin >> m;
}

int main()
{
    int cod, x;

    read();
    while (m--)
    {
        fin >> cod >> x;
        switch (cod)
        {
        case 0:
            fout << bs0(x) << '\n';
            break;
        case 1:
            fout << bs1(x) << '\n';
            break;
        case 2:
            fout << bs2(x) << '\n';
            break;
        }
    }

    return 0;
}