Cod sursa(job #2967487)

Utilizator AndreiN96Andrei Nicula AndreiN96 Data 19 ianuarie 2023 18:04:14
Problema Cautare binara Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.34 kb
#include <fstream>

using namespace std;

const int N = 100000;

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

    int n;
    in >> n;
    int v[N];
    for (int i = 0; i < n; i ++)
    {
        in >> v[i];
    }

    int m;
    in >> m;
    for (int k = 0; k < m; k ++)
    {
        int q, x;
        in >> q >> x;
        if (q == 0)
        {
            int st = 0, dr = n - 1, rez;
            bool gas = false;
            while (st <= dr)
            {
                int m = (st + dr) / 2;
                if (v[m] == x)
                {
                    rez = m;
                    gas = true;
                    st = m + 1;
                }
                else
                {
                    dr = m - 1;
                }
            }
            if (gas)
            {
                out << rez + 1 << '\n';
            }
            else
            {
                out << -1 << '\n';
            }
        }
        else if (q == 1)
        {
            int st = 0, dr = n - 1, rez;
            bool gas = false;
            while (st <= dr)
            {
                int m = (st + dr) / 2;
                if (v[m] <= x)
                {
                    rez = m;
                    gas = true;
                    st = m + 1;
                }
                else
                {
                    dr = m - 1;
                }
            }
            if (gas)
            {
                out << rez + 1 << '\n';
            }
            else
            {
                out << 1 << '\n';
            }
        }
        else
        {
            int st = 0, dr = n - 1, rez = n - 1;
            bool gas = true;
            while (st <= dr)
            {
                int m = (st + dr) / 2;
                if (v[m] >= x)
                {
                    rez = m;
                    gas = true;
                    dr = m - 1;
                }
                else
                {
                    st = m + 1;
                }
            }
            if (gas)
            {
                out << rez + 1 << '\n';
            }
            else
            {
                out << n << '\n';
            }
        }
    }

    in.close();
    out.close();

    return 0;
}