Cod sursa(job #2727175)

Utilizator Stefan_XTRadu Stefan Rares Stefan_XT Data 21 martie 2021 16:14:04
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.76 kb
#include <fstream>
#include <vector>
using namespace std;

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

int BS_0(int c, int x, vector<int> &v)
{
    int ind = -1;
    int l = 0;
    int r = v.size() - 1;

    while(l <= r)
    {

        int m = l + (r - l) / 2;
        if (v[m] <= x)
        {
            if (v[m] == x) ind = m;
            l = m + 1;
        }
        else
            r = m - 1;
    }

    return ind;
}

int BS_1(int c, int x, vector<int> &v)
{
    int ind = -1;
    int l = 0;
    int r = v.size() - 1;

    while(l <= r)
    {
        int m = l + (r - l) / 2;

        if (v[m] <= x)
        {
            ind = m;
            l = m + 1;
        }
        else
            r = m - 1;
    }

    return ind;
}

int BS_2(int c, int x, vector<int> &v)
{
    int ind = -1;
    int l = 0;
    int r = v.size() - 1;

    while(l <= r)
    {
        int m = l + (r - l) / 2;

        if (v[m] >= x)
        {
            ind = m;
            r = m - 1;
        }
        else
            l = m + 1;
    }

    return ind;
}

int main()
{
    vector<int> v;
    v.reserve(100006);

    int n, m;
    fin >> n;
    for (int i = 0; i < n; i++)
    {
        int x;
        fin >> x;
        v.push_back(x);
    }

    fin >> m;
    for (int i = 1; i <= m; i++)
    {
        int x, c;
        fin >> c >> x;
        if (c == 0)
        {
            int bs = BS_0(c, x, v);
            if (bs == -1)
                fout << -1 << '\n';
            else
                fout << bs + 1  << '\n';
        }
        if (c == 1) fout << BS_1(c, x, v) + 1<< '\n';
        if (c == 2) fout << BS_2(c, x, v) + 1<< '\n';
    }

    fin.close();
    fout.close();
    return 0;
}