Cod sursa(job #3131513)

Utilizator patrick_burasanPatrick Burasan patrick_burasan Data 20 mai 2023 14:10:58
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <fstream>

using namespace std;

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

int cb1(int v[], int n, int x)
{
    int st, dr, mid, p = -1;
    st = 0;
    dr = n - 1;
    while (st <= dr)
    {
        mid = st + (dr - st) / 2;
        if (x == v[mid])
        {
            p = mid;
            st = mid + 1;
        }
        else if (x < v[mid])
            dr = mid - 1;
        else
            st = mid + 1;
    }
    return p + 1;
}

int cb2(int v[], int n, int x)
{
    int st, dr, mid, p;
    st = 0;
    dr = n - 1;
    while (st <= dr)
    {
        mid = st + (dr - st) / 2;
        if (x >= v[mid])
        {
            p = mid;
            st = mid + 1;
        }
        else
            dr = mid - 1;
    }
    return p + 1;
}

int cb3(int v[], int n, int x)
{
    int st, dr, mid, p;
    st = 0;
    dr = n - 1;
    while (st <= dr)
    {
        mid = st + (dr - st) / 2;
        if (x <= v[mid])
        {
            p = mid;
            dr = mid - 1;
        }
        else
            st = mid + 1;
    }
    return p + 1;
}

int v[100000];

int main()
{
    int N, M, i;

    in >> N;
    for (i = 0; i < N; ++i)
        in >> v[i];
    in >> M;
    for (i = 0; i < M; ++i)
    {
        int C, X;
        in >> C >> X;
        if (C == 0)
            out << cb1(v, N, X) << '\n';
        else if (C == 1)
            out << cb2(v, N, X) << '\n';
        else
            out << cb3(v, N, X) << '\n';
    }

    in.close();
    out.close();
    return 0;
}