Cod sursa(job #2865214)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 8 martie 2022 16:56:23
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>

using namespace std;

const string filename = "cautbin";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");

int pow2, n, q, v[100005];

int cautbin0(int x)
{
    int sol = 0;
    for(int i = pow2; i > 0; i >>= 1)
        if(sol + i <= n && v[sol + i] <= x)
            sol += i;
    if(v[sol] == x)
        return sol;
    else
        return -1;
}

int cautbin1(int x)
{
    int sol = 0;
    for(int i = pow2; i > 0; i >>= 1)
        if(sol + i <= n && v[sol + i] <= x)
            sol += i;
    return sol;
}

int cautbin2(int x)
{
    int sol = 0;
    for(int i = pow2; i > 0; i >>= 1)
        if(sol + i <= n && v[sol + i] < x)
            sol += i;
    return sol + 1;
}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> v[i];
    pow2 = 1;
    while(pow2 * 2 <= n)
        pow2 *= 2;
    fin >> q;
    for(int i = 1; i <= q; i++)
    {
        int cerinta, val;
        fin >> cerinta >> val;
        if(cerinta == 0)
            fout << cautbin0(val);
        if(cerinta == 1)
            fout << cautbin1(val);
        if(cerinta == 2)
            fout << cautbin2(val);
        fout << '\n';
    }
    return 0;
}