Cod sursa(job #2607930)

Utilizator Silviu.Stancioiu@gmail.comSilviu Stancioiu [email protected] Data 30 aprilie 2020 13:44:43
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <iostream>

using namespace std;

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

    int n;
    fin >> n;
    uint32_t* v;
    v = new uint32_t[n];
    for (int i = 0; i < n; i++)
        fin >> v[i];

    int m;
    fin >> m;

    for (int i = 0; i < m; i++)
    {
        uint32_t task, x;
        fin >> task >> x;

        int sol = 0;
        if (task == 2)
            sol = n - 1;
        for (uint32_t j = (1 << 30); j > 0; j >>= 1)
        {
            if (task != 2)
            {
                if (sol + j < n)
                    if (v[sol + j] <= x)
                        sol += j;
            }
            else
            {
                if (sol > j)
                    if (v[sol - j] >= x)
                        sol -= j;
            }
        }

        int result = sol;
        switch (task)
        {
        case 0:
            if (v[sol] != x)
                result = 0;
        }
        fout << result + 1 << endl;
    }

    fout.close();
    fin.close();

    return 0;
}