Cod sursa(job #2795257)

Utilizator Robert.BrindeaBrindea Robert Robert.Brindea Data 6 noiembrie 2021 10:13:47
Problema Cautare binara Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int MAXN = 100003;
int n, t, a[MAXN];

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> a[i];
    fin >> t;
    int op, x, p = 1;
    while(p*2 <= n) p*=2;
    for(int k = 0; k < t; k++)
    {
        fin >> op >> x;
        switch(op){
        case 0:
        {
            int i, l, ok = 0;
            for(i = 0, l = p; l > 0; l>>=1)
                if(i+l <= n && a[i+l] == x) i+=l;
            fout << (i ? i : -1);
            break;
        }
        case 1:
        {
            int i, l, ok = 0;
            for(i = 0, l = p; l > 0; l>>=1)
                if(i+l <= n && a[i+l] <= x) i+=l;
            fout << i;
            break;
        }
        case 2:
        {
            int i, l, ok = 0;
            x--;
            for(i = 0, l = p; l > 0; l>>=1)
                if(i+l <= n && a[i+l] <= x) i+=l;
            fout << i+1;
            break;
        }
        }
        fout << "\n";
    }
    return 0;
}