Cod sursa(job #2699446)

Utilizator UbiuxMihai Priboiu Ubiux Data 24 ianuarie 2021 15:24:36
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.91 kb
#include <iostream>
#include <fstream>
using namespace std;

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

    int n, m;
    f >> n;
    int *v = new int[n];
    for (int i = 0; i < n; i++)
        f >> v[i];
    f >> m;

    for (int i = 1; i <= m; i++)
    {
        int t;
        f >> t;

        switch (t)
        {
        case 0:
        {
            int li = 0, lf = n - 1, m = (li + lf) / 2, x;
            f >> x;
            while (li <= lf)
            {
                if (v[m] <= x)
                    li = m + 1;
                else
                    lf = m - 1;
                m = (li + lf) / 2;
            }
            // cout << li << ' ' << lf;
            if (v[lf] == x)
                g << lf + 1 << '\n';
            else
                g << -1 << '\n';
            break;
        }

        case 1:
        {
            int li = 0, lf = n - 1, m = (li + lf) / 2, x;
            f >> x;
            while (li <= lf)
            {
                if (v[m] <= x)
                    li = m + 1;
                else
                    lf = m - 1;
                m = (li + lf) / 2;
            }
            // cout << li << ' ' << lf;
            // if (v[lf] <= x)
            g << lf + 1 << '\n';
            // else
            //     g << -1 << '\n';
            break;
        }

        case 2:
        {
            int li = 0, lf = n - 1, m = (li + lf) / 2, x;
            f >> x;
            while (li <= lf)
            {
                if (v[m] >= x)
                    lf = m - 1;
                else
                    li = m + 1;
                m = (li + lf) / 2;
            }
            // cout << li << ' ' << lf;
            // if (v[lf] <= x)
            g << li + 1 << '\n';
            // else
            //     g << -1 << '\n';
            break;
        }
        }
    }
}