Cod sursa(job #2977283)

Utilizator AnghelMihaianghel mihai alexandru AnghelMihai Data 11 februarie 2023 11:07:18
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>

using namespace std;

int cautarebinara1(int v[100000], int st, int dr, int x)
{
    int med, ans;
    while(st<=dr)
    {
        med=(st+dr)/2;
        if(v[med]<=x)
        {
            ans=med;
            st=med+1;
        }
        else
            dr=med-1;
    }
    return ans;
}
int cautarebinara2(int v[100000], int st, int dr, int x)
{
    int med, ans;
    while(st<=dr)
    {
        med=(st+dr)/2;
        if(v[med]>=x)
        {
            ans=med;
            dr=med-1;
        }
        else
            st=med+1;
    }
    return ans;
}

int main()
{
    int v[100000],n, m, ans, x, y;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>v[i];
    }
    cin>>m;
    for(int i=1; i<=m; i++)
    {
        cin>>y>>x;
        if(y==0 || y==1)
        {
            ans=cautarebinara1(v, 1, n, x);
            if(y==0)
            {
                if(v[ans]==x)
                    cout<<ans;
                else
                    cout<<-1;
            }
            else
                cout<<ans;
        }
        else
        {
            ans=cautarebinara2(v, 1, n, x);
            cout<<ans;
        }
    cout<<'\n';
    }
    return 0;
}