Cod sursa(job #3278697)

Utilizator mewcatPetru Boca mewcat Data 20 februarie 2025 16:13:04
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.57 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

int n;

int a[200000];

int bs0(int x)
{
    int l = 0;
    int r = n - 1;
    int m = 0;
    int answer = -2;

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

        if (a[m] > x)
        {
            r = m - 1;
        }
        else
        {
            if (a[m] == x) {answer = m;}

            l = m + 1;
        }
    }

    return answer;
}

int bs1(int x)
{
    int l = 0;
    int r = n - 1;
    int m = 0;
    int answer = 0;

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

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

    return answer;
}

int bs2(int x)
{
    int l = 0;
    int r = n - 1;
    int m = 0;
    int answer = 0;

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

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

    return answer;
}

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

    int t = 0;
    int x = 0;
    int y = 0;
    int j = 0;

    fin >> n;

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

    fin >> t;

    for (int i = 0; i < t; i++)
    {
        fin >> x >> y;

        if (x == 0) {j = bs0(y);}
        if (x == 1) {j = bs1(y);}
        if (x == 2) {j = bs2(y);}

        fout << j + 1;
    }
}