Cod sursa(job #3141197)

Utilizator Pacurari_SofiaPacurari Sofia Pacurari_Sofia Data 13 iulie 2023 11:55:24
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 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)
{
    while(st<dr)
    {
        int mij=(st+dr)/2;
        if(a[mij]<val) st=mij+1;
        else dr=mij;
    }
}

int upprbnd(int st, int dr, int val)
{
    while(st<dr)
    {
        int 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
        {
            bool ok=0;
            for(int j=n;j>=0;--j)
                if(a[j]==x)
                    cout<<j<<'\n', ok=1;
            if(ok==0)
                cout<<-1<<'\n';
        }
    }
}