Cod sursa(job #2908310)

Utilizator DobraVictorDobra Victor Ioan DobraVictor Data 2 iunie 2022 19:12:29
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 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;
            }

            if(x < vec[0])
                fout << "1\n";
            else
                fout << (r + 2) << '\n';

            break;
        }
        default:
            break;
        }
    }

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

    return 0;
}