Cod sursa(job #3141202)

Utilizator Pacurari_SofiaPacurari Sofia Pacurari_Sofia Data 13 iulie 2023 12:02:18
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;

ifstream cin("cautbin.in");
ofstream cout("cautbin.out");

int a[100003], m, n, i, q, x;

int lwrbnd(int st, int dr, int val)
{
    int mij;
    while(st<dr)
    {
        mij=(st+dr)/2;
        if(a[mij]<val) st=mij+1;
        else dr=mij;
    }
    return a[mij];
}

int upprbnd(int st, int dr, int val)
{
    int mij;
    while(st<dr)
    {
        mij=(st+dr+1)/2;
        if(a[mij]<val) st=mij+1;
        else dr=mij;
    }
    return a[mij];
}


int main()
{
    cin>>n;
    for(i=1;i<=n;++i)
        cin>>a[i];
    cin>>m;
    for(i=0;i<=m;++i)
    {
        cin>>q>>x;
        if(q==1) cout<<upprbnd(1, n, x)<<'\n';
        else if(q==2) cout<<lwrbnd(1, n, x)<<'\n';
        else
        {
            int index=0;
            for(int bit=4;bit>=0;bit--)
            {
                index += (1<<bit);// adaugam nr 2^bit
                //modif un sg bit
                if(index > n || a[index]>x) index -= (i<<bit);
                cout<<index<<'\n';
            }
        }
    }
}