Cod sursa(job #3297971)

Utilizator brianabucur11Briana Bucur brianabucur11 Data 25 mai 2025 10:59:32
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax=2e5+5;

int n, logn, v[nmax];


int cb0 (int n, int x)
{
    int origin=0;
    for (int p=logn; p; p>>=1)
    {
        if (origin+p<=n && v[origin+p]<=x)
            origin+=p;
    }
    if (v[origin]==x)
        return origin;
    return -1;
}

int cb1 (int n, int x)
{
    int origin=0;
    for (int p=logn; p; p>>=1)
    {
        if (origin+p<=n && v[origin+p]<=x)
            origin+=p;
    }
    return origin;
}

int cb2 (int n, int x)
{
    int origin=n;
    for (int p=logn; p; p>>=1)
    {
        if (origin-p>=1 && v[origin-p]>=x)
            origin-=p;
    }
    return origin;
}

int main()
{
    fin >> n;
    for (int i=1; i<=n; i++)
        fin >> v[i];
    for (logn=1; logn<=n; logn<<=1);
    int q;
    fin >> q;
    for (int i=1; i<=q; i++)
    {
        int cer, x;
        fin >> cer >> x;
        if (cer==0)
            fout << cb0(n,x) << '\n';
        if (cer==1)
            fout << cb1(n,x) << '\n';
        if (cer==2)
            fout << cb2(n,x) << '\n';
    }
    return 0;
}