Cod sursa(job #2908308)

Utilizator DobraVictorDobra Victor Ioan DobraVictor Data 2 iunie 2022 18:56:05
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <fstream>
 
int main() {
    std::ifstream fin("cautbin.in");
    std::ofstream fout("cautbin.out");

    unsigned int n;
    fin >> n;

    unsigned int vec[100000];

    for(unsigned int i = 0; i < n; ++i)
        fin >> vec[i];

    unsigned int m;
    fin >> m;

    unsigned int pow = 1;
    while(pow < n) {
        pow <<= 1;
    }

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

        switch(cer) {
        case 0:
        {
            unsigned int r = 0, pas = pow;
            while(pas) {
                if(r + pas < n && vec[r + pas] <= x)
                    r += pas;
                pas >>= 1;
            }

            if(vec[r] != x)
                fout << "-1\n";
            else
                fout << (r + 1) << '\n';

            break;
        }
        case 1:
        {
            unsigned int r = 0, pas = pow;
            while(pas) {
                if(r + pas < n && vec[r + pas] <= x)
                    r += pas;
                pas >>= 1;
            }

            fout << (r + 1) << '\n';

            break;
        }
        case 2:
        {
            unsigned int r = 0, pas = pow;
            while(pas) {
                if(r + pas < n && vec[r + pas] < x)
                    r += pas;
                pas >>= 1;
            }

            fout << (r + 2) << '\n';

            break;
        }
        }
    }

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

    return 0;
}