Cod sursa(job #2847353)

Utilizator Chirac_MateiChiriac Matei Chirac_Matei Data 10 februarie 2022 18:05:56
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>

using namespace std;

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

int n,m,a[100000],x,y,z;

void citire()
{
    cin>>n;
    for(int i=1; i<=n; i++)
        cin>>a[i];

    cin>>m;
}

int caz1(int h)
{
    int dr=n,st=1,poz=-1,m;

    while(st<=dr)
    {
        m=(dr+st)/2;

        if(a[m]>h)
            dr=m-1;

        else
        {
            if(a[m]==h)
                poz=m;
            st=m+1;
        }
        if(a[st]>h)break;
    }
    return poz;
}

int caz2(int h)
{
    int dr=n,st=1,poz=-1,m;

    while(st<=dr)
    {
        m=(dr+st)/2;
        if(a[m]>h)dr=m-1;
        else
        {
            if(a[m]<=h)poz=m;
            st=m+1;
        }
    }

    return poz;
}

int caz3(int h)
{
    int dr=n,st=1,poz=-1,m;
    while(st<=dr)
    {
        m=(dr+st)/2;
        if(a[m]>=h)
        {
            poz=m;
            dr=m-1;
        }
        else
        {
            st=m+1;
        }
    }
    return poz;
}

void afisare()
{
    for(int i=1; i<=m; i++)
    {
        cin>>y>>z;
        if(y==0)cout<<caz1(z);
        else if(y==1)cout<<caz2(z);
        else cout<<caz3(z);
        cout<<'\n';
    }
}

int main()
{
    citire();
    afisare();
    return 0;
}